$.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?
我在使用 .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?