我正在尝试使用jquery从api中提取数据,但我收到错误
无法加载资源:服务器响应状态为401(未授权)
我已将网址设置如下
url: "https://jsonodds.com/api/odds/soccer"
我尝试过两种不同的方式设置标题,
首先
headers: {
'JsonOdds-API-Key', key
}
并使用beforesend函数
beforeSend: function (xhr) {
xhr.setRequestHeader("JsonOdds-API-Key", key);
}
我已经定义了我的密钥。我已经测试了postman上的url和header,它返回数据可能是我写的其他代码有问题吗?
答案 0 :(得分:1)
jQuery
中的ajax调用示例:
$.ajax({
url: "https://jsonodds.com/api/odds/soccer",
data: { signature: authHeader },
type: "GET",
beforeSend: function(xhr){xhr.setRequestHeader('JsonOdds-API-Key', key);},
success: function() { alert('Success!'); }
});
我发布了一个完整的例子,因为在OP中我看到了调用的不同部分,我想确保你正确构建它。
希望它有所帮助!
更新1:
data: {}
要发送到服务器的数据。它被转换为查询字符串if 还不是一个字符串。它附加到GET请求的URL。看到 processData选项可防止此自动处理。对象必须 是键/值对。如果value是一个数组,jQuery序列化多个 具有相同键的值基于传统设置的值
查看文档,它将成为您编码成功的指南:http://api.jquery.com/jquery.ajax/
此外,这篇文章对您非常有用:How do I return the response from an asynchronous call?
干杯! ;)
答案 1 :(得分:0)
此代码应该有效;
$.ajax({
url: 'https://jsonodds.com/api/odds/soccer',
headers: {
'JsonOdds-API-Key': key
}
});
401错误也可能是格式错误的API密钥的结果。请检查它是否正确,您可以通过打开开发人员工具查看是否已发送自定义标头 - >网络 - >过滤' api /赔率/足球' - >点击请求 - >在右侧滚动并选中请求标题部分。
<强>更新强>
该API不允许定期的前端ajax调用,因为它们需要ApiKey作为标头,并且不允许跨域请求。要绕过跨域请求,您可以发送JSONP请求,但是您无法发送带有JSONP请求的自定义标头,因此如果您必须发送自定义标头(api密钥),则无法绕过跨域问题。
(index):1 XMLHttpRequest无法加载https://jsonodds.com/api/odds/soccer。对预检请求的响应没有通过访问控制检查:否&#39;访问控制 - 允许 - 来源&#39;标头出现在请求的资源上。起源&#39; https://www.finnair.com&#39;因此不允许访问。响应的HTTP状态代码为401。
测试Curl时,Api键是正确的。在终端粘贴以下内容;
curl -X GET https://jsonodds.com/api/odds -H "JsonOdds-API-Key: yourapikey"
您需要使用某些服务器端解决方案处理对Api的调用,例如NodeJS或PHP。