Браузеры переходят в состояние «занято» по запросу Ajax - PullRequest
6 голосов
/ 14 февраля 2010

В настоящее время я реализую своего рода HTTP Push с использованием длинного опроса для браузеров, которые не поддерживают составные ajax-ответы.

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

Проблема в том, что LongPolling отлично работает на IE 6,7,8 и Firefox (хотя Firefox использует multipart i, я тоже тестировал его с длинными опросами), но в Safari и Chrome входят браузеры "заняты" состоянием во время запросов ajax. (они показывают курсор ожидания окна, и Safari также показывает индикатор «Загрузка» в строке заголовка)

Это, конечно, нежелательно ..

Вот мой код для длинного опроса на основе Jquery 1.4.1:


function MepSubscribeToQueueLongPoll(name, callback) {

    var queueUrl = MepGetQueueUrl(name, "LongPoll");
    MepLongPollStep(queueUrl, callback);
};

function MepLongPollStep(url, callback) {
    $.ajax({
        url: url,
        async: true,
        cache: false,
        success: function (data,status,request) {
            callback(request.responseText);
            MepLongPollStep(url, callback);
        }
    });
};

Обратите внимание, что я обхожу функциональность синтаксического анализа данных Jquery, передавая request.responseText непосредственно обратному вызову, потому что Jquery, похоже, не поддерживает составные ответы ajax, и я хотел быть согласованным по всем путям связи.

1 Ответ

3 голосов
/ 14 февраля 2010

Так как лучший ответ не вышел вперед, мне интересно, решит ли проблема простой тайм-аут. Извините, что дал «предположение» вместо «я знаю, что это верный ответ», но это может на самом деле исправить это.

function MepLongPollStep(url, callback) {
    $.ajax({
        url: url,
        async: true,
        cache: false,
        success: function (data,status,request) {
            callback(request.responseText);
            window.setTimeout( function(){
              MepLongPollStep(url, callback);
            },10);
        }
    });
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...