如何在既没有CORS也没有JSONP的源代码的网页上使用JSON?

时间:2011-12-16 17:05:08

标签: json asp.net-web-api web-applications cors jsonp

Internet上的某些JSON数据服务仅供服务器使用,而忽略了仅由Web应用程序直接使用的可能性。

由于跨网站问题,如果这些服务提供JSONP格式或启用CORS支持,则此类服务可以正常运行。

我想制作一个小工具,可以调用仅返回JSON的在线资源,而不是,并且不支持。

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

在这种情况下可以采用哪些策略?

1 个答案:

答案 0 :(得分:38)

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

一个这样的代理是Yahoo's "YQL"

YQL支持JSONP和CORS。

因此,如果您的浏览器也支持CORS,您可以将其视为JSON代理服务器的免费JSON。如果没有,那么它也是JSONP代理的免费JSON:

以下是我如何在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...