xmlHttpRequest status = 0

时间:2016-01-10 18:05:14

标签: javascript ajax django amazon-web-services

我有一个在AWS域名运行的网站(wagtail CMS):8000,我的API在域名运行:8801

在我的网页上,我尝试使用JS从API获取一些信息(在API上正确设置了Access-Control-Allow-Origin标头,这是一个基于django的应用程序)

不幸的是,无论我尝试访问什么,下面的代码只返回xhr.status = 0和空的responseText。

当我把域名:8000放在xhr.open('GET','http://domain:8000',true)时,一切正常,我看到了我的HTML代码。

function load() {
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://domain:8801/api/', true);
xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
xhr.send();
if (xhr.status != 200) {
  alert( "ERR" ); --always ERR in browser
    } 
    else {
        alert( "SUCCESS" );
    }
}

在API方面,我看到了我的所有请求,在服务器控制台中状态= 200。

2 个答案:

答案 0 :(得分:2)

您应该使用回调函数来捕获使用XMLHttpRequest对象的请求的响应。做这样的事情:

xhr.addEventListener('readystatechange', function() {
    if (xhr.status != 200) {
      alert( "ERR" ); --always ERR in browser
    } else {
      alert( "SUCCESS" );
    }
  }
});

Look here for docs and an examples on doing that.

答案 1 :(得分:0)

你需要在xhr.status完全有效之前等待xhr.readyState == 4(实际上我认为它在3处有效,但让我们保持与99.999%的代码一致)

function load() {
    var xhr = new XMLHttpRequest();
    xhr.open('GET', 'http://domain:8801/api/', true);
    xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4) {
            if (xhr.status != 200) {
                alert( "ERR" ); --always ERR in browser
            } 
            else {
                alert( "SUCCESS" );
            }
        }
    };
    xhr.send();
}