2013-10-01 40 views
2

在我的代码中,我从另一个域的另一个服务器获取一些JSON与jQuery,并在浏览器中得到一个错误。配置括号服务器,以避免访问控制,允许来源错误

XMLHttpRequest cannot load http://url_containing_json.com. Origin http://localhost:53651 is not allowed by Access-Control-Allow-Origin 

配置支架服务器容易吗?或者我需要建立自己的服务器才能做到这一点?

回答

0

此限制来自网络浏览器,而不是服务器。它被称为same-origin security policy(又名同域政策)。

什么是http://url_containing_json.com“JSON服务器”有问题?它是一个你有一定控制权的服务器吗?如果是这样,那么你可以:

A)上传你的代码到“JSON服务器”本身,所以你的网站是从同一个域服务;或

B)上传你的代码,其他一些临时服务器,并使用CORS的JSON服务器上基本上白名单临时服务器的域名(JSON的服务器将提供一个Access-Control-Allow-Origin HTTP标头,如错误消息中提到)。

在另一方面 - 如果“JSON服务器”完全是第三方的,它实际上其他网站像你要取它的JSON?如果是这样,那么它应该已经支持CORS(带有一揽子允许所有策略)或JSONP(允许访问的一种较老的方式,尽管您的请求需要设置稍微不同)。

如果JSON服务器不允许允许跨域请求,则您有最后一招:使用您自己的站点的服务器作为代理。您的页面不是直接ping JSON服务器,而是ping自己的服务器,然后代表页面上的JSON服务器。

所有这些方法都需要运行您自己的服务器,而不是使用内置的“本地主机”服务器。您可以通过文件>项目设置...指向您自己的服务器,但请注意,这将禁用Live HTML Development等某些功能。 (尽管如果你能够使用上面的选项“B”,你可能会破解你的hosts文件,继续使用内置的支架服务器,而不是通过改变其明显的域名)。

希望有帮助!

+1

因此,在我发布之前研究这个问题时,它似乎是通过服务器添加头部的问题,如下面的链接,因此我认为有一些方法可以通过Brackets中的内部服务器来实现,但我不知道如何访问它或它的生活。对我使用括号的全部意义在于实时预览功能,所以知道如何配置它的内部服务器会很高兴http://stackoverflow.com/questions/5008944/how-to-add-an-access-control -allow-origin-header –

+0

不幸的是,这是另一种方式 - 你需要添加一个头到服务器_you're contacts_。这种情况下的“JSON服务器”。如果您不控制该服务器并且它不想让您访问(即,它不提供该标头或基于JSONP的API),那么您的选项非常有限。即使在生产中也是如此。 – peterflynn

+0

您是否介意询问您要联系的服务器? – peterflynn

0

碰到完全一样的问题。我解决这个问题的方法是使用jsonp ajax请求类型,使用$ .ajax()调用的dataType参数。 查看JQuery documentation这个电话。

相关问题