Javascript 异步xml请求不';不归

Javascript 异步xml请求不';不归,javascript,xml,servlets,asynchronous,request,Javascript,Xml,Servlets,Asynchronous,Request,因此,我尝试将同步xml请求重写为异步xml请求。我对这个很陌生,所以如果这个错误真的很愚蠢,请原谅我 不管怎么说,这就是我现在得到的 var getEmployeeData = function(section, question, column){ var xhr = new XMLHttpRequest(); xhr.open("GET", Data.contextPath + "/main/?action=get-employee-list&section=" +

因此,我尝试将同步xml请求重写为异步xml请求。我对这个很陌生,所以如果这个错误真的很愚蠢,请原谅我

不管怎么说,这就是我现在得到的

var getEmployeeData = function(section, question, column){
    var xhr = new XMLHttpRequest();
    xhr.open("GET", Data.contextPath + "/main/?action=get-employee-list&section=" +section+ "&question=" +question+ "&column=" +column, true)
    xhr.onload = function (e) {
        if (xhr.readyState === 4) {
            if (xhr.status === 200) {
                if (employeeDataDone) {
                    if (xhr.responseText==("\r\n")) {
                        employeeList = null;
                        employeeInverseList = null;
                    } else {
                        employeeList = JSON.parse(xhr.responseText)[0];
                        employeeInverseList = JSON.parse(xhr.responseText)[1];
                    }
                }
            } else {
              console.error(xhr.statusText);
            }
          }
    }.bind(this);
    xhr.onerror = function (e) {
        console.error(xhr.statusText);
    };
    xhr.send(null);
}.bind(this);
非常感谢您的帮助,如果您需要我忽略的任何额外信息,只需索取即可


谢谢

您应该侦听onreadystatechange事件或将具有该名称的函数附加到对象。以下内容可以解决您的问题:

var getEmployeeData = function(section, question, column){
    var xhr = new XMLHttpRequest();
    xhr.open("GET", Data.contextPath + "/main/?action=get-employee-list&section=" +section+ "&question=" +question+ "&column=" +column, true)
    xhr.onreadystatechange = function (e) {
        if (xhr.readyState === 4) {
            if (xhr.status === 200) {
                if (employeeDataDone) {
                    if (xhr.responseText==("\r\n")) {
                        employeeList = null;
                        employeeInverseList = null;
                    } else {
                        employeeList = JSON.parse(xhr.responseText)[0];
                        employeeInverseList = JSON.parse(xhr.responseText)[1];
                    }
                }
            } else {
              console.error(xhr.statusText);
            }
          }
    }.bind(this);
    xhr.onerror = function (e) {
        console.error(xhr.statusText);
    };
    xhr.send(null);
}.bind(this);
编辑:
要了解更多详细信息,我建议您查看维基百科。

为什么要检查onload中的4和200?@epascarello我不知道,抱歉,我是个新手。这些可以删除吗?@epascarello他在XHR对象上使用了错误的方法名。在请求的整个生命周期中,使用正确的方法名会在不同的状态下被多次调用。我想我忘了将onload更改为onreadystatechange。太棒了,谢谢你,马克!我发现自己时不时地为忘记API名称而挠头。至于您的另一个响应,它似乎在天空中的巨大bitbucket中丢失了,我将在onreadystatechange方法的主体中调用您的数据到DOM绑定消息。如果你觉得答案有帮助,请投票表决。你也可以投票!这会奖励那些帮助过你的人。另外,如果一个答案解决了你的问题,你可以把它标记为已回答,给你自己和回答问题的人额外的分数。是的,我不知道我上次的回答是怎么回事。我将如何进行DOM绑定?还向上投票并给了您一个复选标记:)。这取决于您的应用程序以及您希望生成的标记是什么。如果您使用的是jQuery,那么可以通过append方法轻松地将标记片段传递给元素;如果您使用的是纯JS,那么应该使用元素的目标元素的innerHTML属性[最简单的方法是document.getElementById(idAttributeValue)]。很抱歉,我没有完全理解。如果我只是使用document.getElementById(id)添加到元素中,当我还没有从服务器收到信息时,这对我有什么帮助?