19

Internet 上的一些 JSON 数据服务被设计为仅由服务器使用,而忽略了被纯 Web 应用程序直接使用的可能性。

由于跨站点问题,如果此类服务提供JSONP格式或启用CORS支持,它们将起作用。

我想做一个JavaScript小工具,可以调用只返回JSON不返回的在线资源,不支持。

一个例子是我正在制作的一个单页应用程序,我能找到的唯一数据源没有提供CORSJSONP. 作为一个单页应用程序,它没有自己的服务器,因此受制于同源策略。

在这种情况下有哪些可用的策略?

4

1 回答 1

38

**一种方法是找到可以访问JSON数据源的代理,然后将其提供给您的 Web 应用程序,转换为使用JSONCORS或您可以处理的任何其他格式,而无需担心跨站点问题。

一种这样的代理是雅虎的“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 */
    }
  }
);

还有一个关于 jsfiddle 的版本......

于 2011-12-20T17:06:14.753 回答