跨域xml获取请求失败

时间:2020-09-01 10:52:32

标签: javascript cors

我正在尝试帮助一个朋友做一个程序,但是我的编码经验有些过时(十年的经验)。尝试通过其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的信息,以及它如何影响跨域的这类请求,但是我不太了解它的工作方式以及如何解决它。

感谢您的帮助。

2 个答案:

答案 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(未找到)错误。