使用脚本标记进行跨域ajax

时间:2012-02-29 00:06:43

标签: javascript jquery cross-domain script-tag

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

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

感谢。

2 个答案:

答案 0 :(得分:2)

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

参考文章:

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

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

Google搜索JSONP的更多参考资料。

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

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

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

答案 1 :(得分:0)

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

例如,如果/api.json返回了类似内容:

{'name': 'Bob'}

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

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

然后,您可以使用类似jQuery's $.getJSON function的内容来为您处理脚本创建。

不幸的是,尽管存在open request for it,但纽约时报API目前不支持JSONP。

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