javascript - 跨域xml获取请求失败
问题描述
我试图帮助一个朋友完成一个程序,但我的编码经验有些过时(10 年的付出或接受)。试图通过他们的 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 以及它如何影响这些跨域请求的内容,但我不太了解它是如何工作的以及如何围绕它工作。
任何帮助表示赞赏。
解决方案
首先,您需要在 URL 前加上https://
. 这样您就可以向外部服务器而不是 localhost 发出请求。第二件事是在你的标题中application/JSON
应该是application/json
.
另外不要忘记您的密钥需要以“API”为前缀。例子API [some_random_key]
我已经测试了以下代码并且它有效。您只需添加自己的 API KEY。
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);
};
推荐阅读
- javascript - Jest vue3:SyntaxError:意外的令牌“导出”(信号)
- windows - 如何获取不包含特定类型文件的文件夹/子文件夹列表?
- gradle - 在 Android Studio 中允许 HTTP 下载
- google-api - googleapi servicenetworking上的terraform后端500错误
- c# - 如何使用反射获取没有获取/设置的属性?
- django - 在 pycharm 中运行 django 时出现错误 (root) Additional property django is not allowed
- c++ - 巴比伦平方根算法输出不匹配示例
- visual-studio-code - 如何将 Visual Studio 代码输出路径颜色从白色更改为绿色。我被卡住了,有人请帮我设置一下吗?
- python - 有没有办法在按下按钮时先打开红色 LED,然后打开蓝色 LED,最后打开绿色 LED?
- java - 如何使用 Spring 将运行时创建的字符串注入另一个类