2011-12-16 20 views
18

Internet上的一些JSON数据服务旨在仅由服务器使用,而忽略了仅由Web应用程序直接使用的可能性。如何在不使用CORS和JSONP的源网页上使用JSON?

由于存在跨站点问题,如果这些服务提供了JSONP格式或启用了CORS支持,则这些服务将起作用。

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

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

在这种情况下有什么策略可用?

回答

35

**的方法之一是找到能够访问JSON数据源,然后将其用于转化你的Web应用程序与JSON工作,CORS,或者,你可以不用担心跨站点处理任何其他形式的代理关注。

一个这样的代理是Yahoo's "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 */ 
    } 
    } 
); 

And a version on jsfiddle...

+0

如何将这项工作?您违反了同源策略,通话将失败。你不需要对YQL进行某种类型的JSONP调用吗? – 2012-09-13 00:16:30