0

で解決しようとして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)insideonreadystatechangeの関数は、1、2、3、および 4 を 1 つずつ出力します。

4

1 に答える 1

4

ベルギが言ったように、リクエストは非同期です。これは 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.
    } );
}

アップデート

xmlHttp.onreadystatechange は、4 の前に readyState 1、2、および 3 で呼び出されます。

if( state === 4 )
{
    if( statuscode === 200 )
    {
        // success
    }
    else
    {
        // failure
    }
}
/*else
{
    ignore states 1, 2 and 3
}*/
于 2012-12-02T22:08:30.437 に答える