Internet 上的一些 JSON 数据服务被设计为仅由服务器使用,而忽略了被纯 Web 应用程序直接使用的可能性。
由于跨站点问题,如果此类服务提供JSONP
格式或启用CORS
支持,它们将起作用。
我想做一个JavaScript小工具,可以调用只返回JSON
不返回的在线资源,不支持。
一个例子是我正在制作的一个单页应用程序,我能找到的唯一数据源没有提供CORS
或JSONP
. 作为一个单页应用程序,它没有自己的服务器,因此受制于同源策略。
在这种情况下有哪些可用的策略?
**一种方法是找到可以访问JSON
数据源的代理,然后将其提供给您的 Web 应用程序,转换为使用JSON
、CORS
或您可以处理的任何其他格式,而无需担心跨站点问题。
一种这样的代理是雅虎的“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 */
}
}
);