2017-04-19 64 views
1

我试图使用jQuery从API中提取数据,但我receving错误如何设置我的请求标题?

无法加载资源:服务器与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,并且它返回的数据可能与我写的其他代码有关吗?

+1

标题:{'JsonOdds-API-Key',关键 }它不是一个逗号,你需要在这里它的冒号。 – Webbanditten

+0

'header:{'JsonOdds-API-Key':key}'Note':',不是','。每当你在JS中看到问题时,你应该总是先检查控制台 - 在这种情况下你会看到语法错误。 –

回答

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: {} 

数据要被发送到服务器。如果 不是字符串,它将被转换为查询字符串。它附加到GET请求的url。请参阅 processData选项以防止此自动处理。对象必须是 是键/值对。如果值是一个数组,jQuery的序列化多 值与基于传统的设置

的值相同的密钥检查的文件,这将是你为你的编码成功的方针是:http://api.jquery.com/jquery.ajax/

而且,这后可能对你非常有用:How do I return the response from an asynchronous call?

干杯! ;)

+0

什么是数据:{signature:authHeader}行?我是新来的jquery对不起,如果它是简单的 – DaveReg

+0

@DaveReg你好朋友!检查我的更新! ;)我建议你检查文档。 ;) – SrAxi

+0

我尝试了所有可以思考的方式,但仍然遇到此错误。你可以尝试下面的键,24c00f23-2457-11e7-b6b0-0afc106a1b07。我几乎可以肯定这是正确的钥匙,但所以我知道我不会浪费我的时间 – DaveReg

0

此代码应该工作;

$.ajax({ 
    url: 'https://jsonodds.com/api/odds/soccer', 
    headers: { 
     'JsonOdds-API-Key': key 
    } 
}); 

401错误也可能是API格式不正确的结果。请检查它是否正确,您可以通过打开开发人员工具 - >网络 - >筛选“api /赔率/足球”来查看是否发送了自定义标题 - >点击请求 - >在右侧滚动并查看请求标题部分。

UPDATE

该API不允许正规前端Ajax调用,因为他们需要ApiKey为标题,并且不允许跨域请求。为了解决跨域请求,你可以发送JSONP请求,但是你不能发送带有JSONP请求的自定义标题,所以如果你必须发送自定义标题(api key),你不能绕过跨域问题。

(index):1 XMLHttpRequest无法加载https://jsonodds.com/api/odds/soccer。对预检请求的响应不会通过访问控制检查:请求的资源上不存在“访问控制 - 允许来源”标头。因此不允许访问原产地'https://www.finnair.com'。该响应具有HTTP状态码401.

当测试卷曲时,Api密钥是正确的。在终端粘贴以下内容;

curl -X GET https://jsonodds.com/api/odds -H "JsonOdds-API-Key: yourapikey"

您需要处理与一些服务器端解决方案,例如在API调用NodeJS或PHP。

+0

我仍然得到401错误。还有什么你知道可能会导致这种情况吗?虽然我写了其他代码,但这是我收到的唯一错误。 – DaveReg

+0

您是否检查过您使用的API密钥是否正确? – Rikusor

+0

是的API密钥是正确的。当我去开发人员工具和筛选'api/odds/soccer'时,虽然没有出现 – DaveReg

相关问题