Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   $.post с ожиданием ответа внутри .each() (https://javascript.ru/forum/jquery/44471-%24-post-s-ozhidaniem-otveta-vnutri-each.html)

Sanu0074 21.01.2014 12:21

$.post с ожиданием ответа внутри .each()
 
Есть перебор блоков:

div.each(function(){
   $.post(url,vars,function(data){
      //....actions
   })
})


Например в переборе 10 блоков div, из каждого мы вытягиваем данные и шлем их на сервер и ждем ответа, если делать так, то 10 запросов пошлются сразу, ответа друг за другом ждать они не будут. А нужно сделать так:

div.each(function(){
    //..получили данные из текущего div
    //шлем запрос и ждем ответ
   $.post(url,vars,function(data){
      //....actions
   })
   //как дождались ответа и выполнили действия с данными полученными в ответе от сервера приступаем к следующему шагу .each()
})


Я думаю можно слепить такой костыль:

div.each(function(){
    var serverStatus=false;
    //..получили данные из текущего div
    //шлем запрос и ждем ответ
   $.post(url,vars,function(data){
      //....actions
      serverStatus=true;
   })
     //каждых пол секунды проверяем переменную serverStatus (завершились ли действия над ответом от сервера)

      var i = function f() {
         if(serverStatus){ clearInterval(i); break;}  //если завершились действия над ответом от сервера, то выходим из цикла и приступаем к след итерации .each()
      }
      setInterval(i, 500); 

})

это все еще обернуть в цикл, ....
Но это по моему мнению очень плохой костыль, посоветуйте что-то более адыкватное!
p.s. спасибо за внимание)

ksa 21.01.2014 14:55

Цитата:

Сообщение от Sanu0074
посоветуйте что-то более адыкватное

Не использовать циклы вообще.

Посылать следующие данные только в ответе сервера.
Правда нужно учитывать, что сервер может и не ответить... Как и ответить ошибкой.


Часовой пояс GMT +3, время: 11:04.