如何从外部JSON提要创建JSONP?

我有两个域名:www.domain1.com和www.domain2.com

我在domain1上有一个普通的JSON feed。

我想从domain1中提取JSON提要并将其放在domain2上的模块上。

从我读过的内容来看,实现它的方法是使用JSONP,但是你如何去做呢? 有没有办法只用JQuery / javascript做到这一点? 或者我是否必须使用服务器端代码(我正在使用Coldfusion)。 我也可以使用.getJSON而不是.ajax(我是初学者,所以我从来没用过.ajax)

编辑好吧我仍然感到困惑。 只是在url末尾添加回调就破坏了它。 我怎么能做到这一点,而不是一个远程路径的饲料我拉这个代码在www.domain2.com上的绝对路径,但饲料是在www.domain1.com?

var feed ="/event/json.tag/tag/sports/"; $.getJSON(feed,function(data) { $.each(data.items, function(i,obj) { do something here... } } 

JSONP只是一个围绕JSON对象的回调函数。 一般约定是有一个返回JSON的端点,除非在请求中定义了一个回调参数,并在这种情况下返回JSONP。

即http://www.domain1.com/api/getStuff可能会返回:

 {'foo': 'bar', 'fizz': 'buzz'} 

那么http://www.domain1.com/api/getStuff?cb=cb123应该返回:

 cb123({'foo': 'bar', 'fizz': 'buzz'}); 

我不知道ColdFusion,但我认为这个例子很好: http : //www.coldfusionjedi.com/index.cfm/2009/3/11/Writing-a-JSONP-service-in-ColdFusion

除非其他人已经在您正在使用的服务器中构建了JSONP支持,否则没有客户端解决方案…

阅读jQuery文档$.ajax$.getJSON将是一个良好的开端,无论如何有很多关于jsonp的好教程,例如这是一个很棒的教程:

 $.getJSON("http://api.oscar.aol.com/presence/get?k=key&f=json&t=aimuser&c=?", function(result){ if (result.response.data.users[0].state == 'online') { $("#status").css("background-image", "url('online.jpg')"); } } ); 

如网站所述:

f参数告诉服务返回结果的格式 – 在我们的例子中是JSON。 c参数指定要使用的JSON回调 – 这很重要!

在jQuery文档中:

如果URL包含字符串“callback =?” (或类似的,由服务器端API定义),请求被视为JSONP。

所以请记住发送回调并处理后面的数据很容易。

编辑:另一个很好的例子 。

EDIT2:
当没有指定回调值时,jQuery将为您分配(从$ .getJSON页面)flickr URL将变为:

http://api.flickr.com/services/feeds/photos_public.gnejsoncallback = jsonp1294786450519 &tags = cat&tagmode = any&format = json

并回应:

 jsonp1294786450519({ "title": "Recent Uploads tagged cat", "link": "http://www.flickr.com/photos/tags/cat/", "description": "", "modified": "2011-01-11T22:47:12Z", "generator": "http://www.flickr.com/", "items": [ { .... rest of json 

因此,您需要使用domain1发送的回调来包装json

您可以从domain1检索JSON“feed”,并在请求完成时将该数据作为参数传递给您自己的Javascript函数(在domain2上)(onComplete / onSuccess)。