Может ли обратный вызов завершенного триггера XmlHttpRequest до завершения функции отправки? - PullRequest
1 голос
/ 18 марта 2012

Я только что заметил странное поведение в веб-приложении, которое у меня возникло после установки Firefox 11. Я не видел этой ошибки раньше, и сайт работает уже более года.

var timeOutTimer = null;

var StartDownload = function () {
    xhr.open("GET", "/Download", true);           //Notice asynchronous=true
    xhr.onreadystatechange = DownloadComplete;
    xhr.send("...");

    timeOutTimer = new Timer(......);   //This line gets executed AFTER DownloadComplete()
};

var DownloadComplete = function () {
    if (xhr.readyState == 4) {
        timeOutTimer.Abort();           //<--------timeOutTimer is null here
        //Callstack points back to xhr.send
    }
}

Должно ли это быть на самом делевозможно ли для XmlHttpRequest вызвать onreadystatechange-callback еще до выхода из функции send ()?

Эта ошибка возникает только при просмотре веб-сайта на моем локальном сервере разработки.Кроме того, если я добавлю серверную сторону с задержкой 1сек, проблем не будет.Я не пробовал ни в одном другом браузере.

Я полагаю, что решением было бы запустить таймер перед отправкой, но я просто хочу узнать причину такого поведения, и если это нормально, так как я никогда не испытывалэто раньше.

1 Ответ

1 голос
/ 18 марта 2012

вы говорите "еще до выхода из функции send ()", но это не совсем так. Вы вызываете send, а затем создаете таймер, но все происходит так быстро, что, прежде чем вы даже включите таймер в его переменную, происходит обратный вызов. это асинхронно, как вы и просили. просто нужно быть готовым к этому.

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