Javascript XMLHttpRequest返回JSON对象
我想从Javascript中的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
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
选项。。。我的应用程序要花很长时间,也要花同样的时间,只是如果你想把数据带到动作中,而不是把动作带到数据中,其他一切都必须等待。答案不是在底部记录(),而是在回调中。