返回属性(XHR)未定义

时间:2015-08-14 23:21:48

标签: javascript ajax xmlhttprequest

xhr帖子的未定义返回。我不知道问题出在哪里

var d=new XMLHttpRequest();
var data;
d.open("POST",b,!0);
d.setRequestHeader("Content-type","application/json");
d.onreadystatechange=function(){
 if(d.readyState==4){
   var data={status:d.status,text:d.responseText};
   return data.text; // this return undefined
  }
};
d.send(c);

1 个答案:

答案 0 :(得分:0)

由于您正在执行异步XMLHttpRequest,因此无法从onreadystatechange回调中返回值。相反,您必须在该回调中使用结果或调用其他函数并将结果传递给它。从该回调中返回一个值,只需将其返回到XHR引擎的内容中 - 它永远不会进入您的代码。

此外,您需要确保readyState === 4(这意味着请求已完成)并且您有成功的响应代码,或者您需要处理错误代码。以下是如何:

var d = new XMLHttpRequest();
d.open("POST", url, true);
d.setRequestHeader("Content-type","application/json");
d.onreadystatechange = function(){
    // if request has finished
    if (this.readyState === 4){
        // if request finished successfully
        if (this.status === 200) {
            // process this.responseText here
        } else {
            // process this.status error response code here
        }
     }
  }
};
d.send(data);

此外,一个字符变量不会使您的代码更具可读性。强烈建议您对所有变量使用有意义的名称。在部署之前,可以使用最小化器缩短代码,同时保留可读版本以进行编辑和维护。