首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xml onreadystatechange更改问题

xml onreadystatechange更改问题
EN

Stack Overflow用户
提问于 2012-12-03 05:56:39
回答 1查看 2.4K关注 0票数 0

我正在尝试使用XMLHttpRequest解决问题,但我遇到了一个问题:

代码语言:javascript
复制
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 == 4console.log的输出始终是未定义的,并且从不进入if,只进入else,这是因为在第一次执行if时,readyState的值为1

所以,任何解决这个问题的方法,因为它让我发疯,我已经尝试了我现在能想到的所有方法。

更新

代码的格式,这是我最后一次尝试的格式,因为在我将它分离之前,在变量和各种事情中,我试图解决这个问题

Btw,onreadystatechange函数内部的一个console.log(xmlHttp.readyState),将逐个输出: 1,2,3,4

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-03 06:08:30

正如bergi所说,请求是异步的。这意味着x立即返回,xmlHttp.onreadystatechange后来被称为。如果您需要对y内部的响应执行某些操作,请将其作为回调传递,以便x可以在适当的时候调用它:

代码语言:javascript
复制
function x( callback )
{
    if( pseudocode: request is ok )
    {
        callback( response );
    }
}

function y()
{
    x( url, function( response )
    {
        // do something with the response.
    } );
}

更新

使用readyState 1、2和3在4之前调用xmlHttp.onreadystatechange。

代码语言:javascript
复制
if( state === 4 )
{
    if( statuscode === 200 )
    {
        // success
    }
    else
    {
        // failure
    }
}
/*else
{
    ignore states 1, 2 and 3
}*/
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13674321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档