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

hip*_*ail 19 json jsonp web-applications cors asp.net-web-api

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

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

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

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

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

hip*_*ail 38

**一种方式是找到一个可以访问的代理JSON数据源,然后将其用于转化的工作你的Web应用程序JSON,CORS或者你可以不用担心跨站点关注处理任何其它格式.

一个这样的代理是雅虎的"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 */
    }
  }
);
Run Code Online (Sandbox Code Playgroud)

和jsfiddle的版本......

  • http://jsonp.jit.su/很神奇!"启用对任何JSON API的跨域请求." 它在Github上https://github.com/afeld/jsonp (2认同)
  • [这是一个cors代理列表](https://gist.github.com/jimmywarting/ac1be6ea0297c16c477e17f8fbe51347) (2认同)