我正在尝试使用XMLHttpRequest
的方法,但是遇到了一个问题:
function x(url, callback) { //edited
xmlHttp.onreadystatechange = function() {
if ( xmlHttp.readyState == 4 && xmlHttp.status == 200 ) {
callback(xmlHttp.responseText;) //edited
} else {
document.getElementById('content').innerHTML = '<div class="error">Ups, an error ocurred! Server response: <span>'+xmlHttp.responseText+'</span></div>';
}
}
xmlHttp.open('GET', url, true);
xmlHttp.send(null);
}
function y()
{
var url = base_url + '?asa=test';
x(url, function (response) { //edited
console.log(response);
});
}
但是我的问题是
if readyState == 4
。 console.log
的输出始终是不确定的,永远不会进入if
,只有else
,这是因为第一次执行if
时,readyState
的值为1
。因此,解决该问题的任何方法,因为它使我发疯,我已经尝试了我能想到的一切。
更新
代码的格式,这是我上次尝试使用的格式,因为在将其分开之前,我曾尝试将其分解为变量和用于解决该问题的各种方法
顺便说一句,在
console.log(xmlHttp.readyState)
函数内部的onreadystatechange
,将一一输出:1、2、3和4 最佳答案
正如bergi所说,请求是异步的。这意味着x立即返回,并且稍后调用xmlHttp.onreadystatechange。如果您需要对y内的响应做一些事情,请将其作为回调传递,以便x在适当的时候可以调用它:
function x( callback )
{
if( pseudocode: request is ok )
{
callback( response );
}
}
function y()
{
x( url, function( response )
{
// do something with the response.
} );
}
更新
使用4之前的readyState 1、2和3调用xmlHttp.onreadystatechange。
if( state === 4 )
{
if( statuscode === 200 )
{
// success
}
else
{
// failure
}
}
/*else
{
ignore states 1, 2 and 3
}*/