为什么此HTTP请求失败?

时间:2017-09-20 20:33:24

标签: javascript http xmlhttprequest

我正在使用此代码发出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。   飞行前响应不成功

此外,"有名字"从未打印过。

为什么这段代码会在前一天工作时中断?这是API端还是我的问题?

UPDATE! 我在api网站上找到了this。实现这个最简单的方法是什么?我目前没有后端,除此之外不需要任何后端。我理解这个问题是因为他们不希望我的API在客户端可读的Javascript中,这是有道理的。我可以通过其他方式登录API,可能是用户的电子邮件和密码吗?

1 个答案:

答案 0 :(得分:0)

API需要能够(正确地)处理CORS,具体而言,您的问题是关于预检

在进行实际的CORS调用之前,它将使用OPTIONS方法尝试相同的调用,以确保它是安全的。服务器应该为此返回某些标头。

所以是的,这是在API方面。

您可以阅读有关HTTP access control (CORS)

的更多详情