配置Brackets Server以避免Access-Control-Allow-Origin错误

时间:2013-10-01 22:09:21

标签: jquery adobe-brackets

在我的代码中,我使用jQuery从另一个域的另一个服务器获取一些JSON,并在浏览器中出错。

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

是否可以轻松配置Brackets服务器以允许此操作?或者我是否需要设置自己的服务器才能执行此操作?

2 个答案:

答案 0 :(得分:0)

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

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

A)将您的代码上传到“JSON服务器”本身,以便您的网站来自同一个域;或

B)将您的代码上传到其他临时服务器,并使用JSON服务器上的CORS基本上将登台服务器的域名列入白名单(JSON服务器将提供Access-Control-Allow-Origin HTTP标头,如上所述在错误消息中。)

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

如果JSON服务器允许跨域请求,您可以采用最后的手段:使用您自己站点的服务器作为代理。您的页面不是直接ping JSON服务器,而是ping自己的服务器,然后代表页面ping JSON服务器。

所有这些方法都需要运行您自己的服务器,而不是使用内置的Brackets“localhost”服务器。您可以通过文件>将括号指向您自己的服务器。项目设置... ,但请注意,这将禁用实时HTML开发等某些功能。 (虽然如果您能够使用上面的选项“B”,您可能会破解您的hosts文件以继续使用内置的Brackets服务器,而不是通过更改其明显的域名。)

希望有所帮助!

答案 1 :(得分:0)

陷入了完全相同的问题。我解决这个问题的方法是使用jsonp ajax请求类型,使用$ .ajax()调用的dataType参数。 请参阅此次通话中的JQuery documentation