JQuery ajax звонит в каждом цикле

У меня есть проблема при использовании jQuery .each () и .ajax () функции вместе. Я использую .each () для цикличного выполнения через 5 элементов и выполняю .ajax () призыв к каждому. Моя проблема состоит в том, что я только хочу, чтобы цикл продолжился, когда ответ был получен от каждого запроса ajax. В настоящее время все 5 элементов циклично выполняются, 5 ajax запрашивает быть сделанным, затем 5 возвращаемых ответов.

Hers простой пример:

$(".element").each(function() {
    var id= $(this).find(('txtId').val();
    $.ajax({
       type: "POST",
       url: "/Handlers/Handler.ashx",
       data: "ID=" + id,
       success: function(xml){

         // I would like the each() loop to pause until this is hit, 
         // and some additional logic can be performed. 

       }
     });

});

Удачи.

12
задан Nick Craver 16 August 2010 в 10:50
поделиться

2 ответа

Вы можете использовать параметр async , чтобы сделать каждый запрос синхронным (= останавливать выполнение скрипта до тех пор, пока каждый запрос завершен):

async По умолчанию все запросы отправляются асинхронно (т.е. по умолчанию установлено значение true). Если вам нужны синхронные запросы, установите для этого параметра значение false. Междоменные запросы и запросы dataType: jsonp не поддерживают синхронную работу. Обратите внимание, что синхронные запросы могут временно заблокировать браузер, отключив любые действия, пока запрос активен.

но, как уже сказано в документации, это крайне не рекомендуется, так как это может привести к зависанию браузера, если запрос зависнет или истечет время ожидания.

Было бы лучше изменить архитектуру вашего кода таким образом, чтобы он мог работать с классическими функциями обратного вызова, если это вообще возможно.

10
ответ дан 2 December 2019 в 21:02
поделиться

Пекка знает правильный ответ. Вам просто нужно отредактировать свой сценарий, как показано ниже.

$(".element").each(function() {
    var id= $(this).find(('txtId').val();
    $.ajax({
       type: "POST",
       async: false,
       url: "/Handlers/Handler.ashx",
       data: "ID=" + id,
       success: function(xml){

       }
     });

});
4
ответ дан 2 December 2019 в 21:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: