在我的代码中,我使用jQuery从另一个域的另一个服务器获取一些JSON,并在浏览器中出错。
XMLHttpRequest cannot load http://url_containing_json.com. Origin http://localhost:53651 is not allowed by Access-Control-Allow-Origin
是否可以轻松配置Brackets服务器以允许此操作?或者我是否需要设置自己的服务器才能执行此操作?
答案 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。