我无法使用.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会吗?
答案 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?