我正在尝试帮助一个朋友做一个程序,但是我的编码经验有些过时(十年的经验)。尝试通过其API从数据库中提取数据的位置。我是通过XMLhttpRequest发出此请求的,但是即使到达服务器也遇到问题。
发生的错误:
Failed to load resource: the server responded with a status of 404 (Not Found)
http://localhost/jasper/api.shiftbase.com/api/rosters?min_date=2020-07-13&max_date=2020-12-31&department_id=24477
它试图在我自己的域中搜索URL。但是我需要它来搜索跨域。
整个功能:
function getRequest(){
var _request = new XMLHttpRequest();
var key = myKeyHere;
var url = "api.shiftbase.com/api/rosters?min_date=2020-07-13&max_date=2020-12-31&department_id=24477";
_request.onreadystatechange = function(event){
console.log(_request.readyState + " + " + _request.status);
if (_request.readyState == 4){
if ((_request.status >= 200 && _request.status < 300) || _request.status == 304){
alert(_request.responseText);
} else {
alert('Request was unsucceful: ' + _request.status);
}
}
};
_request.open("get", url, true);
_request.setRequestHeader("Accept", "application/JSON", false);
_request.setRequestHeader("Content-Type", "application/JSON", false);
_request.setRequestHeader("Authorization", key, false);
_request.send(null);
};
我还阅读了很多有关CORS的信息,以及它如何影响跨域的这类请求,但是我不太了解它的工作方式以及如何解决它。
感谢您的帮助。
答案 0 :(得分:0)
首先,您需要在URL前面加上https://
。这样,您就可以向外部服务器而不是本地主机发出请求。第二件事是标题中的application/JSON
应该是application/json
。
也不要忘记您的密钥需要带有“ API”的prefixed。示例API [some_random_key]
我已经测试了以下代码,并且可以正常工作。您只需要添加自己的API密钥即可。
function getRequest(){
var _request = new XMLHttpRequest();
var key = "API [replace_this_with_your_key]"; // Example: "API a1b2c3d4e5f6g7h8i9"
var url = "https://api.shiftbase.com/api/rosters?min_date=2020-07-13&max_date=2020-12-31&department_id=24477";
_request.onreadystatechange = function(event){
console.log(_request.readyState + " + " + _request.status);
if (_request.readyState == 4){
if ((_request.status >= 200 && _request.status < 300) || _request.status == 304){
alert(_request.responseText);
} else {
alert('Request was unsucceful: ' + _request.status);
}
}
};
_request.open("get", url, true);
_request.setRequestHeader("Accept", "application/json", false);
_request.setRequestHeader("Content-Type", "application/json", false);
_request.setRequestHeader("Authorization", key, false);
_request.send(null);
};
答案 1 :(得分:-1)
如果要向外部服务器发出请求,请尝试在//
变量声明(第4行)的行的开头添加url
。
您的请求已向本地网络服务器http://localhost/jasper/...
发出,您收到404(未找到)错误。