Есть ли лучший способ последовательно отправлять несколько запросов AJAX? - PullRequest
3 голосов
/ 11 апреля 2010

У меня есть страница с несколькими формами, которые я отправляю через Ajax POST. Сначала я пытался использовать синхронные запросы XHR, но это приводит к блокировке браузера на время выполнения запроса и нарушает мои эффекты манипуляции с DOM, что недопустимо. Таким образом, шаблон, который я в итоге использовал, в основном таков:

var fcount = 0;    // incremented for each form to be submitted
function submit_form( num ) { 
    var fdata = { ... }; // data from form # num
    $.ajax( { async:    true,
              url:      '/index.cgi',
              data:     fdata,
              type:     'POST',
              success:  function() { 
                  if ( num < fcount ) { 
                      submit_form( ++num );
                  }
              }
           } );
}

$( '#submit_form_btn' ).click( function() { submit_form( 1 ) } );

Рекурсия кажется мне некрасивым решением проблемы, которая по сути является итеративной. Есть ли более чистый или более изящный способ, которым с этим можно справиться?

Ответы [ 4 ]

10 голосов
/ 11 апреля 2010

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

UPDATE

Я провел еще несколько исследований, и, очевидно, существует платформа под названием jQuery Message Queuing , которая обрабатывает последовательные запросы AJAX через очереди сообщений. Может быть, это поможет вам.

1 голос
/ 11 апреля 2010

Более чистым способом было бы поддерживать очередь обратных вызовов (ajax-запросов), которые вы хотите сделать, и запускать их по одному.

0 голосов
/ 11 апреля 2010

Если то, что вы хотите сделать, это то, что делает ваш код, то просто использовать рекурсивную структуру.

Но подозрительная часть здесь использует более одного вызова, вы тратите много времени на отправкунесколько звонков.Вставьте все данные в один вызов и покончите с этим, если это возможно каким-либо образом, который является наиболее предпочтительным методом.

0 голосов
/ 11 апреля 2010

Я бы сказал: увеличьте время ожидания для вашего скрипта на сервере и отправьте все в одном POST.

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