无法让Ajax与keyed api一起工作

时间:2012-03-28 18:10:27

标签: ajax jquery

我正在尝试使用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 :

我知道跨域请求的影响,但我不确定我是否正在做正确的事

3 个答案:

答案 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=?”参数,因为如果dataTypejsonp,则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'或类似的东西。