我正在尝试使用NYT api工作,但我一直遇到不同的错误。我试过用这个
$.ajax({
url:"http://api.nytimes.com/svc/news/v3/content/all/all/.json?api-key=xxxxxxxxxxxxxxxxxxxxx:xx:xxxxxxxxxx&callback=?",
dataType: 'jsonp',
success:function(json){
alert("Success");
},
error:function(){
alert("Error");
},
});
当我运行时,我得到了
Uncaught SyntaxError: Unexpected token :
我知道跨域请求的影响,但我不确定我是否正在做正确的事
答案 0 :(得分:1)
您遗失的只是在网址中将.json
更改为.jsonp
。
您的代码是正确的,但如果您查看返回的响应,您会发现它实际上不是jsonp响应;它只是一个普通的json有效载荷。
添加callback参数不会导致NYT API自动返回jsonp。如果你想要jsonp,请使用.jsonp
格式并提供回调参数。
答案 1 :(得分:0)
From(RFC 1738,Dec。'94):
只有字母数字[0-9a-zA-Z],特殊字符 “$ -_。+!*'(),”[不包括引号 - ed]和保留字符 用于保留目的可以在URL中以未编码的方式使用。
所以你需要在进行ajax调用之前手动编码uri或者通过'data'
对象传递参数:
$.ajax({
url:"http://api.nytimes.com/svc/news/v3/content/all/all/.json",
data: {"api-key":"xxxxxxxxxxxxxxxxxxxxx:xx:xxxxxxxxxx"},
dataType: 'jsonp',
success:function(json){
alert("Success");
},
error:function(){
alert("Error");
},
});
此外,我并未指定“callback=?
”参数,因为如果dataType
为jsonp
,则jquery ajax会自动发送该参数。
答案 2 :(得分:0)
我修复了这个问题,我在我的请求URL中指定了jsonp:
http://api.nytimes.com/svc/news/v3/content/all/all/.jsonp?limit=10&api-key={my key}
然后在调用方法时只指定dataType: 'jsonp'
而不是jsonp: 'jsonp'
或类似的东西。