Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript XMLHttpRequest返回JSON对象_Javascript_Ajax_Json_Xmlhttprequest - Fatal编程技术网

Javascript XMLHttpRequest返回JSON对象

Javascript XMLHttpRequest返回JSON对象,javascript,ajax,json,xmlhttprequest,Javascript,Ajax,Json,Xmlhttprequest,我想从Javascript中的getMine函数内部返回一个对象,但是当我试图打印出该对象时,我得到了未定义的。如何在以下函数中返回obj function getMine() { var httpRequest = new XMLHttpRequest(); httpRequest.onreadystatechange = function() { if (httpR

我想从Javascript中的
getMine
函数内部返回一个对象,但是当我试图打印出该对象时,我得到了
未定义的
。如何在以下函数中返回
obj

            function getMine() {
                var httpRequest = new XMLHttpRequest();
                httpRequest.onreadystatechange = function() {
                    if (httpRequest.readyState === 4) { // request is done
                        if (httpRequest.status === 200) { // successfully
                            var obj = JSON.parse(httpRequest.responseText)
                            return obj;
                        }
                    }
                };
                httpRequest.open('GET', "/getTest");
                httpRequest.send();
            }
            var rs = getMine();
            console.log("2", rs);

因为getMine正在进行ajax调用,所以它本质上是异步的。在调用getMine()后立即尝试记录rs的值时,ajax调用尚未完成。将console.log调用添加到onreadystatechange回调:

httpRequest.onreadystatechange = function () {
    if (httpRequest.readyState === 4) {
        if (httpRequest.status === 200) {
            var obj = JSON.parse(httpRequest.responseText);
            console.log('responseText: ', responseText);
            return obj;
        }
    }
};

如果您需要能够处理返回值,那么您可能希望研究使用来处理ajax调用的异步解析。

那么您将如何强制使用返回值,等待它完成?我会使用一个促进这一点的框架,如jQuery,或者使用承诺,正如我在promises链接中提到的那样,使用httpRequest.open('GET',“/getTest”,false);强制返回等待。不应使用
false
选项。。。我的应用程序要花很长时间,也要花同样的时间,只是如果你想把数据带到动作中,而不是把动作带到数据中,其他一切都必须等待。答案不是在底部记录(),而是在回调中。