微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

jquery – 在尝试访问localhost时如何避免跨源策略错误?

我希望在外部服务器上上传一个静态网站,该网站将尝试从localhost:3000获取 JSON数据(服务器程序已经在用户的计算机上运行).

我试图用这样的jQuery做到这一点:

$.getJSON("http://localhost:3000/page",function(data){
    // process data...
});

为什么我会收到跨源政策错误,如何阻止它们?我以为访问JSON数据应该否定那些跨站点错误

更新1

我刚刚按照建议尝试了带回调的JSONP,但这里有一个奇怪的问题:如果我添加一个指向localhost:3000 / page URL的脚本标记,则加载回调并在页面加载完成后正确显示数据,但这不是我的目标.

如果我使用$.getJSON方法尝试相同的操作,我仍然会得到与以前相同的错误

XMLHttpRequest无法加载http:// localhost:3000 / page. Access-Control-Allow-Origin不允许使用原始http:// localhost ..

解决方法

有趣的想法!

但localhost与somewebsite.com完全不同.因此适用相同的原产地政策.你需要:

> JSONP这意味着localhost上的服务器需要支持自定义回调中包装JSON
> CORS它允许真正的跨域ajax,但在请求的两端都需要大量额外的头部fuzting.

JSONP可能是最容易实现的.来自$.getJSON()的文档:

If the URL includes the string “callback=?” (or similar,as defined by
the server-side API),the request is treated as JSONP instead. See the
discussion of the jsonp data type in $.ajax() for more details.

然后,您的localhost服务器只需要使用jQuery将传入的回调参数.这意味着不是简单地渲染:

<%= jsonString() %>

本地服务器应该呈现更像这样的东西:

<% if (params.callback) { %>
  <%= params.callback %>(<%= jsonString %>);
<% } else { %>
  <%= jsonString %>
<% } %>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐