Javascript 如果请求失败,为什么XMLHttpRequest响应返回null?

Javascript 如果请求失败,为什么XMLHttpRequest响应返回null?,javascript,ajax,xmlhttprequest,Javascript,Ajax,Xmlhttprequest,我试图处理来自XMLHttpRequest的不同响应代码。但是,如果我得到的不是200,响应对象总是空的,并且不打印期望的状态,例如403、404等。这是我的密码: var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (xhttp.readyState == 4) { if (xhttp.status == 200) { console.

我试图处理来自XMLHttpRequest的不同响应代码。但是,如果我得到的不是200,响应对象总是空的,并且不打印期望的状态,例如403、404等。这是我的密码:

 var xhttp = new XMLHttpRequest();
 xhttp.onreadystatechange = function() {
    if (xhttp.readyState == 4)
    {
        if (xhttp.status == 200) {
           console.log(xhttp.status);
        }else{
            console.log(xhttp.status);

        }
    }
};

xhttp.open('GET', url, true);
xhttp.send();
工作时的控制台输出:

200
由于任何原因失败时的控制台输出:

0
例如,对于错误代码400,console将显示以下内容:

script.js:11 2script.js:55获取 400 nginx/1.10.2 searchQuery@script.js:55 reader.onload@ 无法加载script.js:14 index.html:1 XMLHttpRequest . 请求的服务器上不存在“Access Control Allow Origin”标头 资源因此,不允许访问源“null”。反应 有HTTP状态代码400


我更喜欢用纯Javascript来实现这一点,所以请不要建议使用jquery,如果它的唯一目的是处理不同的错误代码,您可以试试

    var xhttp = new XMLHttpRequest();
    xhttp.onload = function() {

        if (xhttp.status == 200) {
           console.log(xhttp.status);
        }else{
            console.log(xhttp.status);
        }

    };

    xhttp.open('GET', url, true);
    xhttp.send();

CORS问题将导致状态为0-与状态不是200无关。i、 e.响应状态为non 200的非CORS错误和响应主体不会有空响应HMM,但是,nytimes api确实返回CORS头-您收到CORS错误的事实意味着问题可能与源“null”有关。。。哦,我明白了,对于一个错误的请求,API不会返回CORS头,只会返回一个好的请求。。。糟糕的API设计我对AJAX有点缺乏经验,今天只读了一点关于CORS的书。如果问题出在原点“空”,有什么办法解决吗?不,那不是问题。。。问题是API不会为错误的请求返回cors头,因此您无法访问响应。。。。正如我所说,代码猴子设计的API很糟糕,他们不知道如何创建一个可行的API——对此你无能为力。谢谢你的帮助@JaromandaXThat。谢谢出于好奇,为什么onreadystatechange的这项功能不起作用?事实上,它仍然失败。。请尝试以下链接: