帮助,我很困惑。
我只需要将JSON对象放入我的页面。 URL如下:
http://disqus.com/api/get_forum_posts/?user_api_key=MYKEY&forum_id=MYID&api_version=1.1
如果我使用Flickr API URL和getJSON example中给出的代码,它可以正常工作:
<script>$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?",
function(data){
alert(data);
$.each(data.items, function(i,item){
$("<img/>").attr("src", item.media.m).appendTo("#images");
if ( i == 3 ) return false;
});
});</script>
但是,如果我在上面的Disqus网址中替换,则数据为空。在阅读JSON Feed Returning null while using jQuery getJSON之后,我检查了这个URL是否返回了有效的JSON,并且确实如此。
Disqus API似乎暗示它支持JSONP - '你也可以传递“jsonp:callback”作为“api_response_format”参数'。我已经尝试添加此参数,但它没有帮助。
我做错了什么?我怀疑问题可能是我并不真正理解JSON和JSONP之间的区别,以及我需要做些什么来恢复JSONP。
答案 0 :(得分:2)
您可以这样称呼它:
$.ajax({
url: 'http://disqus.com/api/get_forum_posts/?user_api_key=MYKEY&forum_id=MYID&api_version=1.1&api_response_format=jsonp:myFunction',
dataType: 'jsonp'
});
function myFunction(data) { //make sure this is available globally
//use data
}
与您的文档链接一样,结尾api_response_format=jsonp:myFunction
上的参数是关键,请直接检查链接here,即使由于密钥错误,请查看格式如何不同?这就是JSONP调用所需要的,functionName({data})
响应格式。
答案 1 :(得分:0)
将您自己提供的两个URL复制到浏览器窗口中,DISQUS URL返回错误“问题加载页面”。
答案 2 :(得分:0)
Disqus调用缺少回调函数
答案 3 :(得分:0)
api_response_format=jsonp:callback
参数应该是您的Javascript定义的回调函数的名称。所以假设我有一个名为handleJson
的函数,它应该解析JSON响应,然后你必须传递参数jsonp:handleJson
。然后,Disqus会将调用的代码传递给handleJson
。
JSONP带来的是绕过同域原始策略的能力。假设网址&lt; http://foo/json
&gt;使用此JSON对象进行响应:
{
id: 2,
first_name: 'John',
last_name: 'Doe',
}
您可以使用该对象的唯一方法是,如果您也使用域foo。但是,如果您无法访问该域,假设您正在访问返回JSON格式对象的API,那么您需要从该API提供程序获得一些帮助。
假设您现在请求的网址变为&lt; http://foo/json?callback=handleJson
&gt;并且API提供者回复:
handleJson({id: 2, first_name: 'John', last_name: 'Doe'})
现在,浏览器将尝试在您定义的环境中运行该Javascript片段。因此,如果您已定义handleJson
函数,则会调用它。
这就是JSONP,它是一种绕过同域原始策略并为您提供JSON对象的跨站点脚本的方法。
答案 4 :(得分:0)
此外,如果您的日期未填充零,则不会显示事件。 防爆。 2010-9-5不好 防爆。 2010-09-05好