задержка ajax нарушает порядок операций - PullRequest
1 голос
/ 05 августа 2011

Вот программа, которая вызывает 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); возвращает правильное значение.

Есть кто-нибудь, кто знает, как я могу обойти это? это так раздражает ...

Спасибо

Amir.

1 Ответ

1 голос
/ 05 августа 2011

AJAX (сокращение от Asyncronous Javascript And XML) по своей природе асинхронно.Это означает, что он начинает выполняться, когда механизм Javascript обнаруживает его в сценарии, но остальная часть сценария продолжает обрабатываться, не дожидаясь завершения вызова AJAX.

Вы можете обойти это поведение, указав свой вызов AJAX дляработать синхронно:

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

Установка false в качестве третьего параметра open() обеспечит требуемое поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...