$ .ajax从外部api返回数据,但$ .getJSON抛出错误

时间:2018-04-12 19:56:09

标签: jquery ajax api getjson

我无法使用.getJSON JQuery方法从外部API *返回数据,但.ajax方法工作正常。

在.ajax中使用此代码对我有用:

var apiKey = 'myKey',
requestURL = 'https://api.propublica.org/congress/v1/115/senate/members.json'; 


        $.ajax({
     url: requestURL, 
     type: "GET",
     dataType: 'json',
     headers: {'X-API-Key': apiKey }
   }).done(function(data){
   console.log(data)
   });

使用$ .getJSON对我不起作用:

var apiKey = 'myKey',
requestURL = 'https://api.propublica.org/congress/v1/115/senate/members.json'; 


    $.getJSON(requestURL + '?callback=?', {
        'X-API-Key': apiKey
    }, function(data){
    console.log(data);
    });

唯一的区别是我添加了“?callback =?”作为文档和几个帖子/教程说的URL,以便它将返回JSONP。我已经尝试更改网址,看看我是否可以修复它,几个小时后我无法让它工作。

我得到的控制台中的错误是:

  

获取https://api.propublica.org/congress/v1/115/senate/members.json?callback=jQuery110203399070889473792_1523562076495&X-API-Key=myKey&_=1523562076496 net :: ERR_ABORTED

如果我采取“?callback =?”关于getJSON示例的url,我收到上面的消息以及此附加错误消息:

  

无法加载https://api.propublica.org/congress/v1/115/senate/members.json?X-API-Key=myKey:请求的资源上没有“Access-Control-Allow-Origin”标头。因此,不允许原点“http://localhost:81”访问。响应的HTTP状态代码为401。

我很困惑为什么这不起作用,因为getJSON应该是我JQuery getJSON Documentation以上的确切.ajax调用的简写。

你知道为什么.getJSON不起作用,但.ajax会吗?

2 个答案:

答案 0 :(得分:1)

您无法使用getJSON设置http标头,您的API似乎要求它允许CORS。虽然您可以使用ajaxSetup来设置标题,但我不推荐它,因为所有后续的ajax调用都将使用这些设置。

jQuery.ajaxSetup({headers: {'X-API-Key': apiKey }});
$.getJSON(requestURL, function(data){
    console.log(data);
});

答案 1 :(得分:-1)

我认为问题可能是您无法将标头传递到$ .getJSON。

可能重复:How can I pass request headers with jQuery's getJSON() method?