4

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

我正在尝试使用这样的 jQuery 来做到这一点:

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

为什么我会收到跨域策略错误,我该如何阻止它们?我认为访问 JSON 数据应该可以消除那些跨站点错误?

更新 1

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

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

XMLHttpRequest cannot load http://localhost:3000/page. Origin http://localhost is not allowed by Access-Control-Allow-Origin..

4

1 回答 1

3

有趣的想法!

localhostsomewebsite.com. 所以同样的原产地政策适用。您需要:

  • JSONP这意味着服务器localhost需要支持将 JSON 包装在自定义回调中
  • CORS允许真正的跨域 ajax,但在请求的两端都需要大量额外的标头模糊处理。

JSONP 可能是最容易实现的。从文档中$.getJSON()

如果 URL 包含字符串“callback=?” (或类似的,由服务器端 API 定义),请求被视为 JSONP。有关详细信息,请参阅 $.ajax() 中对 jsonp 数据类型的讨论。

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

<%= jsonString() %>

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

<% if (params.callback) { %>
  <%= params.callback %>(<%= jsonString %>);
<% } else { %>
  <%= jsonString %>
<% } %>
于 2011-12-11T21:37:45.960 回答