一尘不染

如何从既没有CORS也没有JSONP的来源使用网页上的JSON?[关闭]

json

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。

7年前关闭。

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

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

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

一个示例案例是我正在制作的单页应用程序,该应用程序无法找到CORS或提供的唯一数据源JSONP。作为单页应用程序,它没有自己的服务器,因此必须遵守同源政策。

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


阅读 197

收藏
2020-07-27

共1个答案

一尘不染

**一种方式是找到一个可以访问的代理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上的一个版本…

2020-07-27