ajax延迟扰乱了操作顺序

时间:2011-08-05 18:29:15

标签: javascript ajax

这是一个程序,它调用ajax从http响应的头部读取一个值,并设置一个名为_ecpop的变量,并将其用于以后的操作......

所以我将全局名为_ecpop的变量定义为

var _ecpop="";

然后这里是ajax调用代码:

if (typeof XMLHttpRequest != "undefined") {
    _ec_req = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
    _ec_req = new ActiveXObject("Microsoft.XMLHTTP");
    }
    // make the request
    _ec_req.open("GET", requestString, true);
    // function to deal with response
    _ec_req.onreadystatechange = function()  {
    if (_ec_req.readyState==4)
        {
        if (_ec_req.status==200)
            {
            var respHeaders = _ec_req.getAllResponseHeaders();
            // strip out unnecessary headers
            respHeaders = respHeaders.replace (/\n/g,"|X|");
            var beg = respHeaders.indexOf("ECAcc (");
            _ecpop = respHeaders.substring(beg+7,beg+10);
            //make an if statement here...
            console.log(_ecpop);

            }

        }
    }
    console.log(_ecpop);

,其余代码使用_ecpop。

问题是浏览器使用_ecpop =“”执行其余代码。即第一个第二个console.log(_ecpop);返回空,然后是第一个console.log(_ecpop);返回正确的值。

有没有人知道如何绕过它?这太刺激了......

谢谢,

阿米尔。

1 个答案:

答案 0 :(得分:1)

AJAX(Asyncronous Javascript和XML的首字母缩写)本质上是异步的。这意味着它在Javascript引擎在脚本中遇到它时开始执行,但脚本的其余部分继续处理而不等待AJAX​​调用完成。

您可以通过指示AJAX调用同步操作来绕过此行为:

_ec_req.open("GET", requestString, false);

false设置为open()的第三个参数将提供您所请求的行为。