последовательные, а не параллельные сообщения JQuery AJAX - PullRequest
2 голосов
/ 16 февраля 2009

Я, вероятно, упускаю что-то очевидное, но, похоже, я не могу заставить мои сообщения AJAX работать последовательно, а не одновременно с jQuery.

ad_numbers - это массив числовых идентификаторов.

$(ad_numbers).each(function() {
  ad_number = $.trim(this);

  if(!ad_number) { return true; }

  $.post('/fetch.php', { ad_number: ad_number }, function(data, textStatus) {
    $('#log').prepend('<p>' + data + '</p>');
  });
});

В fetch.php он у меня есть sleep(2), поэтому я могу убедиться, что он работает правильно. Вместо того чтобы ждать, пока пройдет первый POST, прежде чем перейти к следующему номеру объявления в массиве, похоже, что он запускает их все одновременно.

Полагаю, $.post() возвращается до завершения? Какой лучший способ избежать этого?

Ответы [ 2 ]

7 голосов
/ 16 февраля 2009

Попробуйте добавить async: false к вашим опциям.

$(ad_numbers).each(function() {
    ad_number = $.trim(this);

    if(!ad_number) { return true; }

    $.ajax({
        type: 'POST',
        url: '/fetch.php',
        data: {ad_number: ad_number},
        async: false,
        success: function(data, textStatus) {
            $('#log').prepend('<p>' + data + '</p>');
        }
    });
});
2 голосов
/ 16 февраля 2009

AJAX является асинхронным. fetch.php может вызывать sleep, но JavaScript работает в асинхронном режиме и не ждет окончания вашего sleep.

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