【发布时间】:2018-03-02 01:28:04
【问题描述】:
我正在使用此代码发出 API 请求:
function httpGet(url){
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
console.log(this.status)
if (this.readyState == 4 && this.status == 200) {
console.log("Got names")
getNamesFromJSONArray(request.responseText);
};
};
request.open("GET", url, true);
request.setRequestHeader("Authorization", "Basic (API key goes here)");
request.setRequestHeader("Accept-Encoding", "gzip");
request.send();
}
前几天还有效,但现在失败了,告诉我:
加载资源失败:预检响应不成功
和
XMLHttpRequest 无法加载 https://api.insight.ly/v2.1/contacts。 预检响应不成功
此外,永远不会打印“Got names”。
为什么这段代码在前几天工作时会中断?是 API 端的问题还是我的问题?
更新! 我在 api 网站上找到了this。实现这一点的最简单方法是什么?我目前没有后端,除此之外不需要任何后端。我理解这个问题是因为他们不希望我的 API 在客户端可读的 Javascript 中,这是有道理的。我可以通过其他方式登录 API,比如通过用户的电子邮件和密码吗?
【问题讨论】:
-
对我来说听起来像是 CORS 问题。您可能需要发送正确的访问标头。
-
@ObsidianAge 那为什么前几天还有效呢?
-
有关这里发生的事情的解释,请参阅 stackoverflow.com/a/45533146/441757 或 stackoverflow.com/questions/45586064/… 或 stackoverflow.com/questions/45210184/… (不幸的是,标记为重复的问题没有真正解释所有行为的答案这种情况,据我所知)。要点是:
https://api.insight.ly/v2.1/contacts端点需要对 OPTIONS 请求进行授权。它不应该。 -
因为
https://api.insight.ly/v2.1/contacts需要对 OPTIONS 请求进行授权,所以您无法修复它——您将无法从浏览器中运行的前端 JavaScript 代码向该端点发出请求,并且从中取回数据。如果它对您之前的工作没有任何错误,那么我想您只能假设https://api.insight.ly/v2.1/contacts所有者最近改变了行为(我猜想需要对 OPTIONS 请求进行授权),这就是您的问题 -
@sideshowbarker 感谢您的回复。所以基本上没有后端就没有办法访问这些数据?
标签: javascript http xmlhttprequest