无法从JavaScript函数返回对象的值

| 我有一个函数,该函数尝试以以下方式从调用函数捕获返回值:
var select = xhrRetrieve(projID);
这是xhrRetrieve函数的示例:
function xhrRetrieve(projID) {
    var xhr = new XMLHttpRequest();

    xhr.onreadystatechange = function() {
        if(xhr.readyState == 4) {
            if(xhr.status == 200) {
                var obj = $.parseJSON(xhr.responseText);

                return obj.select.toString();
            }
        }
    }

    var url = \"ajax.cgi\";
    var data = \"action=retrieve-opp&proj-id=\" + projID;

    xhr.open(\"POST\",url);
    xhr.setRequestHeader(\"Content-Type\",\"application/x-www-urlencoded\");
    xhr.send(data);

}
我将jQuery与纯JavaScript结合使用。每当我尝试使用以下方法获取obj.select的值时:
var select = xhrRetrieve(projID);
选择总是返回
undefined
。 我究竟做错了什么?     
已邀请:
         该函数不返回任何内容 调用函数的那一刻,(当​​前不存在的)返回值已分配给
select
。同时,您的ajax请求被触发,这需要时间才能完成。在ajax请求完成(并成功)之前,不会调用回调函数。 这应该工作:
function doStuffWithTheAjaxResponse(select) {
   // do stuff
}

function xhrRetrieve(projID) {
    var xhr = new XMLHttpRequest();

    xhr.onreadystatechange = function() {
        if(xhr.readyState == 4) {
            if(xhr.status == 200) {
                var obj = $.parseJSON(xhr.responseText);

                doStuffWithTheAjaxResponse(obj.select.toString());
            }
        }
    }

    var url = \"ajax.cgi\";
    var data = \"action=retrieve-opp&proj-id=\" + projID;

    xhr.open(\"POST\",url);
    xhr.setRequestHeader(\"Content-Type\",\"application/x-www-urlencoded\");
    xhr.send(data);

}
    
        由于请求是异步的,因此该函数将在您的代码在onreadestatechange触发之前返回。您可以切换到同步并在函数返回之前获取值:
function xhrRetrieve(projID) {
    var returnVal;
    var xhr = new XMLHttpRequest();

    var url = \"ajax.cgi\";
    var data = \"action=retrieve-opp&proj-id=\" + projID;

    //3rd param is false to switch to synchronous
    xhr.open(\"POST\",url, false);
    xhr.setRequestHeader(\"Content-Type\",\"application/x-www-urlencoded\");
    xhr.send(data);
    if(xhr.readyState == 4) {
        if(xhr.status == 200) {
            var obj = $.parseJSON(xhr.responseText);
            return obj.select.toString();
        }
    }
}
    
        函数xhrRetrieve没有返回值。您期望发生什么?     
        您在那里有两个功能。内部函数返回一个值,但不返回外部值。内部函数是一个事件处理程序,因此返回值不会随处可见。您的XMLHttpRequest是异步的,因此您不会立即获得返回值。请参阅此帖子以获取更详细的说明:xmlHttpRequest .open()方法中的参数“ true”     

要回复问题请先登录注册