JQuery AJAX-запрос ведет себя синхронно - PullRequest
2 голосов
/ 23 апреля 2011

Это похоже на «ответ» на вопрос
JQuery AJAX-запрос ведет себя синхронно по неизвестной причине

Я считаю, что фактическая проблема с параллельным выполнением, наблюдаемая MGM, была упущенаи на самом деле есть проблема с $ .get / $. ajax, выполняемым параллельно.

Посмотрите на фрагмент ниже:

$(function() {
    $(".dd").each(function() {
        var obj = $(this);
        $.get("test.txt", function(data) {
            obj.html(data);
        });
    });
});

Он загружает файл (асинхронно, как я ожидал) иотображает его (конечно же, синхронно).

Однако код выполняется по-разному во время загрузки первой страницы и при обновлении страницы.Я отслеживаю запросы к серверу, используя Firebug Net Panel в Firefox 4.0 на Windows.При загрузке первой страницы (или при обновлении с помощью Ctrl-F5) на панели «Сеть» я вижу, что несколько запросов к «test.txt» запускаются одновременно, и активность сети в основном перекрывается.

Эточасть работает как положено.Результат может быть обработан в браузере один за другим, но запросы к серверу выполняются параллельно.

image:initial load

Когда пользователь нажимает клавишу F5, чтобы обновитьстр.Внезапно параллелизм исчез.И одна и та же веб-страница загружает «test.txt» один за другим.

image: Subsequent refresh

Становится еще яснее, если я заменю отображение данных (obj.html (data);) напростое оповещение: оповещение (данные);При начальной загрузке страницы я получаю несколько предупреждений одновременно на экране.Последующие обновления (F5) наглядно демонстрируют, что, пока одно предупреждающее сообщение отображается на экране, другие загрузки не выполняются (я могу удалить файл, чтобы увидеть, что следующий «$ .get» не работает).

Так что на самом деле $.get не выполняет асинхронное.звонки на сервер.

Есть идеи, почему это происходит?

PS Извините, система не позволяет публиковать изображения, используя предоставленный URL для просмотра скриншотов.

1 Ответ

0 голосов
/ 24 апреля 2011

После различных испытаний я склонен согласиться с тем, что $ .get / $. Ajax работает асинхронно, как и предполагалось.

Тот же код работает совершенно асинхронно, при условии, что сервер не отвечает немедленно, но требует некоторого времени для обработкизапросы.При искусственной задержке на сервере журналы, собранные на сервере, показывают, что запросы поступают параллельно, независимо от того, является ли это начальной загрузкой страницы или последующим обновлением.Firebug показывает то же самое: обращения к серверу перекрываются.

Слишком короткие запросы кажутся слишком быстрыми, и браузер "решает" обработать ответ перед началом следующего вызова.

Какбыло отмечено, что асинхронный не означает быть точно параллельным.

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