2012-02-29 59 views
1

我读this articlethis。我如何采用脚本标记来查询跨域的以下内容:使用脚本标记跨域AJAX

var nytimes_api = 'http://api.nytimes.com/svc/semantic/v2/concept/article/2010/10/06/business/media/06tribune.json?&fields=article_list&api-key=4949d84e6ed8e55dbd7352d88da21f6d:9:65735612'; // returns JSON 
// code accessing nytimes_url 
// and retrieving data from it 

谢谢。

+0

NYTimes是否会返回纯JSON?如果是这样的话,链接到的文章中的JSONP技术将无法工作。如果NYTimes设置为处理JSON-P,那么你可以很容易地用jQuery调用它:看看[jQuery.ajax()'doco页面](http://api.jquery.com/jQuery.ajax /)说关于JSONP。 (你提到的技术并不是真正的Ajax,只是这一点 - 尤其是像jQuery这样的库 - 你的代码可以以类似的方式使用它。) – nnnnnn 2012-02-29 00:14:55

+0

NYTimes不支持JSONP;它只是JSON – 2012-02-29 00:16:17

回答

2

研究JSONP并查看NYTimes API是否支持它以及如何使用它。

参考文章:用谷歌搜索JSONP

http://en.wikipedia.org/wiki/JSONP

http://remysharp.com/2007/10/08/what-is-jsonp/

大量更多的参考。

简而言之,JSONP使用带有参数的自定义URL向远程站点发出脚本请求。通常,其中一个参数是您的JavaScript函数名称,即返回的JavaScript在具有数据时将调用它。所以,你做了远程站点的脚本请求。远程服务器获取脚本请求。它解析出URL中的参数,看看你要做的事情。其中一个参数是一个javascript函数名称。远程服务器然后返回一些JavaScript。该javascript的一部分通常是您请求的数据以及您在URL中指定的JavaScript函数名称的调用。当浏览器执行返回的javascript时,您的函数调用会以请求的数据作为参数进行调用。

数据返回的细节取决于API的实现者,并且您将必须从NYTimes API描述中获得这些信息。

您只能将此JSONP技术与明确支持它的API一起使用。

+0

好的,谢谢JSONP的清晰解释。之前我对此有一个朦胧的理解,但现在我认识到NYTimes不支持JSONP,所以我猜这条路线是行不通的。 – 2012-02-29 00:17:33

0

为了以您描述的方式使用脚本标记,您要请求数据的API需要支持JSONP。更具体地说,它需要支持传递参数(如?callback=myFunction),然后将其输出封装在该函数中,以便可以将数据作为脚本执行。

例如,如果/api.json返回类似这样:

{'name': 'Bob'} 

您将需要/api.json?callback=myFunction返回:

myFunction({'name': 'Bob'}); 

然后,您可以使用类似jQuery's $.getJSON function来处理你的剧本创作。

不幸的是,它看起来并不像纽约时报API当前支持JSONP,尽管有open request for it

为了在不使用JSONP的情况下使用此API,您将需要一些服务器端组件来为您提出请求。

+0

好的,谢谢。我将不得不再看看这一点。 – 2012-02-29 00:18:37