我正在尝试使用jquery从api中提取数据,但收到了一个错误
加载资源失败:服务器响应状态为401 (未授权)
我已经将url设置如下:
url: "https://jsonodds.com/api/odds/soccer"我试着用两种不同的方法设置头文件,
首先
headers: {
'JsonOdds-API-Key', key
}还可以使用beforesend函数
beforeSend: function (xhr) {
xhr.setRequestHeader("JsonOdds-API-Key", key);
}我已经定义了我的键。我已经测试了postman上的url和头文件,它返回了数据,这会不会是我写的其他代码的问题?
发布于 2017-04-19 20:47:15
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!'); }
});我发布了一个完整的示例,因为在操作中我看到了调用的不同部分,我想确保您正确地构建了它。
希望它能帮上忙!
更新1:
data: {}要发送到服务器的
数据。它将转换为查询字符串(如果还不是字符串)。它被附加到GET-requests的url中。请参见processData选项以防止此自动处理。对象必须是键/值对。如果value为数组,jQuery将根据传统设置的值序列化具有相同键的多个值
检查文档,它将是您成功编码的指导原则:http://api.jquery.com/jquery.ajax/
另外,这篇文章对你也很有用:How do I return the response from an asynchronous call?
干杯!;)
发布于 2017-04-19 20:47:38
这段代码应该可以工作;
$.ajax({
url: 'https://jsonodds.com/api/odds/soccer',
headers: {
'JsonOdds-API-Key': key
}
});401错误也可能是错误API-key的结果。请检查是否正确,您可以通过打开developer tools -> Network -> Filter -> 'api/odds/soccer‘->单击右侧的request ->滚动并检查Request header部分,查看是否已发送自定义标头。
更新
该应用程序接口不允许常规的前端ajax调用,因为它们需要ApiKey作为标头,并且不允许跨域请求。要绕过跨域请求,您可以发送JSONP请求,但您不能通过JSONP请求发送自定义头,因此如果您必须发送自定义头(api键),则无法绕过跨域问题。
(索引):1 XMLHttpRequest无法加载https://jsonodds.com/api/odds/soccer。对印前检查请求的响应未通过访问控制检查:请求的资源上不存在“access - control -Allow-Origin”标头。因此不允许访问源'https://www.finnair.com‘。响应的HTTP状态代码为401。
测试Curl时,Api键正确。在终端中粘贴以下内容;
curl -X GET https://jsonodds.com/api/odds -H "JsonOdds-API-Key: yourapikey"
您需要使用一些服务器端解决方案来处理对Api的调用,例如NodeJS或PHP。
https://stackoverflow.com/questions/43496071
复制相似问题