如何从既没有 CORS 也没有 JSONP 的源在网页上使用 JSON? [关闭]
Posted
技术标签:
【中文标题】如何从既没有 CORS 也没有 JSONP 的源在网页上使用 JSON? [关闭]【英文标题】:How can I use JSON on the web page from a source with neither CORS nor JSONP? [closed] 【发布时间】:2012-01-22 04:22:53 【问题描述】:Internet 上的某些 JSON 数据服务被设计为仅供服务器使用,而忽略了被纯网络应用直接使用的可能性。
由于跨站点问题,如果此类服务提供JSONP
格式或启用CORS
支持,则它们将起作用。
我想做一个javascript小工具,可以调用只返回JSON
不返回的在线资源,不支持。
一个示例是我正在制作的单页应用程序,我能找到的唯一数据源没有提供CORS
或JSONP
。作为一个单页应用,它没有自己的服务器,因此受制于同源策略。
在这种情况下有哪些可用的策略?
【问题讨论】:
【参考方案1】:**一种方法是找到一个可以访问 JSON
数据源的代理,然后将其提供给您的 Web 应用程序,该应用程序已转换为使用 JSON
、CORS
或任何其他您可以在没有的情况下处理的格式担心跨站点问题。
这样的代理之一是Yahoo's "YQL"。
YQL 支持 JSONP 和 CORS。
因此,如果您的浏览器也支持 CORS,您可以将其视为免费的 JSON 到 JSON 代理服务器。如果不是,那么它也是一个免费的 JSON 到 JSONP 代理:
这是我如何将它与 jQuery 一起使用的示例:
$.getJSON("http://query.yahooapis.com/v1/public/yql",
q: "select * from json where url=\"http://airportcode.riobard.com/airport/" + code + "?fmt=JSON\"",
callback: gotJSON, // you don't even need this line if your browser supports CORS
format: "json"
,
function(data)
if (data.query.results)
/* do something with
data.query.results.json.code
data.query.results.json.name
data.query.results.json.location
*/
else
/* no info for this code */
);
And a version on jsfiddle...
【讨论】:
这将如何工作?你违反了同源策略,调用会失败。您不需要对 YQL 进行某种 JSONP 调用吗? 完全没有,因为 YQL 支持CORS
,这是一个比 JSONP 更好的替代方案,因为它使用相同的 XHR 接口,而不是有一些缺点的脚本注入方法。如果您需要,YQL 也支持 JSONP。我会更新我的答案。
酷豆!我什至没有意识到这是一个 CORS 调用。我一直在努力弄清楚如何对 YQL 进行 JSONP 调用,结果证明我什至不必这样做。甜!
jsonp.jit.su 太神奇了! “启用对任何 JSON API 的跨域请求。”它在 Github github.com/afeld/jsonp
Here is a list of cors proxies以上是关于如何从既没有 CORS 也没有 JSONP 的源在网页上使用 JSON? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
CORS - 没有 JSONP 的跨域 AJAX 通过允许服务器上的 Origin
当 JSONP 和 CORS 等变通方法存在时,为啥浏览器会有同源策略?