修改 getJSON 以使用 CORS
Posted
技术标签:
【中文标题】修改 getJSON 以使用 CORS【英文标题】:modify getJSON to work with CORS 【发布时间】:2014-05-12 19:09:29 【问题描述】:我正在寻找允许使用 $.getJSON 进行跨域访问的方法。我遇到了一些解决方案,这些解决方案表明使用 CORS 是解决这个问题的方法。但是大多数解决方案都有通用的ajax格式。
我无法使用 JSONP,因为我从无权访问的服务器获取数据。有没有办法使用 $.getJSON 修改此代码以获取数据?
$.getJSON(jsonURL, function(res)
console.log(JSON.stringify(res));
);
或者我必须对 CORS 使用 ajax 格式吗?
【问题讨论】:
【参考方案1】:如果您有权为加载 JS 脚本的页面设置 HTTP 响应标头,那么是的,您可以使用 CORS 发送跨域请求。但是,旧版浏览器不支持此功能。
您需要设置Access-Control-Allow-Origin
标头,例如
Access-Control-Allow-Origin: *
或者
Access-Control-Allow-Origin: http://host-of-other-site.com
https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS
【讨论】:
您能否澄清一下您所说的确切含义 -the HTTP Response Headers for the page that loads your JS scripts
。我目前正在 html 文件中编写 javascript 来获取数据。
如果您正在加载www.my-server.com/your_page
(其中 your_page 包含您的 JS 代码等),您需要更改您的 Web 服务器(apache、nginx、WEBrick 等)以设置 HTTP 标头your_page
或所有页面的 HTTP 响应。这是网络服务器配置和安全问题的问题。
我的 HTML 文件在我的本地系统 - MAC 桌面上。所以我不清楚该怎么做。
或者,我可以编写 python 脚本等来获取数据吗?当前的问题与浏览器有关 - 对吗?
当然,如果后端检索数据,您可以规避该问题。但是你需要某种后端。【参考方案2】:
我无权访问的服务器
我想,这会折断你的脖子。
您需要某种对服务器的访问权限或联系拥有该权限的人。至少你要调整HTTP-Header
进入你的域Access-Control-Allow-Origin
是关键字。
看看MDN
【讨论】:
Server which I do not have access
我的意思是我有一个以 json 格式返回数据的 URL。我无法修改返回为 jsoncallback 格式的内容。
正如我所写:源必须允许带有Access-Control-Allow-Origin
的请求。如果您被允许访问,一切都应该照常进行。 $.getJSON(URL, f).
“至少你必须调整 HTTP-Header 以输入你的域 Access-Control-Allow-Origin
os 关键字。” 服务器不必明确允许来源,它可以回显接收到的任何内容(这就是开放式 CORS 服务器的做法)。但是,是的,基本上你是正确的:如果 OP 的来源已经被允许,那么除非 OP 使用的是 IE9 或更早版本,否则$.getJSON
应该可以工作。如果不允许 OP 的来源,那么他/她必须让服务器的运营商允许它,或者不能直接从浏览器使用该 URL。
@T.J.Crowder 我也在考虑其他选择。我们可以有一个 python 脚本来发出 HTTP Post/Get 请求,而不是使用来自 javascript 的 getJSON 吗?
@Dinesh:是的,这是一个相当标准的解决方法,从您自己的服务器发出请求。以上是关于修改 getJSON 以使用 CORS的主要内容,如果未能解决你的问题,请参考以下文章
不使用 'async: false' 进行顺序 $.getjson 调用的替代方法