Сбой асинхронных xmlhttprequests, синхронные не - PullRequest
0 голосов
/ 12 июля 2010

У меня странная проблема. В следующем примере кода, если я установил асинхронное значение true, запрос завершится неудачно, и Chrome сообщит мне «не удалось загрузить ресурс». Однако, если я переключу его в синхронный режим, он пройдет нормально.

Кроме того, если я делаю несколько запросов xhr, используя этот код и его значение установлено как асинхронный, все запросы показывают ту же проблему, но последний успешно выполнен. Если я установлю xhr на синхронный (то есть false), тогда все запросы пройдут нормально.

Всем, кто скажет: «Просто используйте jQuery», это для проекта, который должен работать независимо от каких-либо библиотек. Я люблю jQuery, но не для этого.

Я тестирую это в Chrome6.0.458.1 и Firefox 3.6.4. Вот код:

    var xhr = window.XMLHttpRequest?
        new XMLHttpRequest():
        new ActiveXObject('Microsoft.XMLHTTP');

    var doxhr = function(url,cb){
        xhr.open('get',url,true);
        xhr.onreadystatechange = function(ev){
            console.log(xhr.readyState, xhr.status );
            //if(xhr.readyState === 4 && xhr.status === 200){
            //  cb(xhr.responseText);
            //}
        }
        xhr.send(null);
    }

1 Ответ

4 голосов
/ 12 июля 2010

Я не уверен, что эти две проблемы связаны, но если вы планируете делать несколько XHR-запросов, вам не следует повторно использовать один и тот же XHR для каждого запроса, или вы должны создать систему очередей, чтобы последующие запросы не могли топтать более ранние запросы.Запросы.Вероятно, вы можете решить проблему только последнего успешного выполнения запроса, обернув xhr внутри doxhr():

var doxhr = function(url,cb){
    var xhr = window.XMLHttpRequest?
        new XMLHttpRequest():
        new ActiveXObject('Microsoft.XMLHTTP');
        xhr.open('get',url,true);
    xhr.onreadystatechange = function(ev){
        console.log(xhr.readyState, xhr.status );
        //if(xhr.readyState === 4 && xhr.status === 200){
        //  cb(xhr.responseText);
        //}
    }
    xhr.send(null);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...