我有两个域:www.domain1.com和www.domain2.com
我在domain1上有一个简单的JSON提要。
我想从domain1中提取JSON提要并将其放在domain2上的模块上。
从我读过的内容来看,实现它的方法是使用JSONP,但是你如何去做呢?有没有办法只用JQuery / javascript做到这一点?或者我是否必须使用服务器端代码(我正在使用Coldfusion)。我也可以使用.getJSON而不是.ajax(我是初学者,所以我从来没用过.ajax)
修改 好吧,我仍然感到困惑。只是在网址末尾添加回调就打破了它。我怎么能做到这一点,而不是一个远程路径的饲料我拉这个代码在www.domain2.com上的绝对路径但是Feed是在www.domain1.com上?
var feed ="/event/json.tag/tag/sports/";
$.getJSON(feed,function(data) {
$.each(data.items, function(i,obj) {
do something here...
}
}
答案 0 :(得分:1)
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支持,否则没有仅限客户端的解决方案......
答案 1 :(得分:0)
阅读jQuery文档$.ajax
和$.getJSON
将是一个良好的开端,无论如何有很多关于jsonp的好教程,this例如,一个很棒的教程:
$.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包含字符串 “回调=?” (或类似的,如定义的 由服务器端API),请求 被视为JSONP。
因此,请记住发送回调并处理后面的数据很容易。
编辑:另一个好example。
EDIT2:
当没有指定回调值时,jQuery将为您(从$ .getJSON页面)分配flickr URL:
http://api.flickr.com/services/feeds/photos_public.gne的 jsoncallback = jsonp1294786450519 强>&安培;标签=猫&安培; tagmode =任何&安培;格式= 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
答案 2 :(得分:-1)
您可以从domain1检索JSON'feed',并在您的请求完成后将该数据作为参数传递给您自己的Javascript函数(在domain2上)(onComplete / onSuccess)。