$.ajax returns 来自外部的数据 api 但 $.getJSON 抛出错误

$.ajax returns data from external api but $.getJSON throws error

我在使用 .getJSON JQuery 方法从外部 API* 获取 return 数据时遇到问题,但 .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);
    });

唯一的区别是我添加了“?回调=?” url 作为文档和几个 posts/tutorials 说它会 return JSONP。我已经尝试更改 url 以查看是否可以修复它,但几个小时后我无法让它工作。

我得到的控制台错误是这样的:

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

如果我接受 "?callback=?"在 getJSON 示例的 url 之外,我收到了上面的消息以及这条附加错误消息:

Failed to load https://api.propublica.org/congress/v1/115/senate/members.json?X-API-Key=myKey: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:81' is therefore not allowed access. The response had HTTP status code 401.

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

您知道为什么 .getJSON 不起作用但 .ajax 可以吗?

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

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

我认为问题可能在于您无法将 headers 传递给 $.getJSON。

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