2013-03-05 2 views
2

Я пытаюсь сделать запрос на мыло внутри .each(), но jQuery выполняет следующий объект (в списке) до завершения первого запроса на мыло. Как я могу поместить замок?Как объединить каждый, а затем

К примеру:

$(xmlHttpRequest.responseXML).find("Items").find("PowerPlant").each(function(index, item){  
    sendSOAPRequest(item); 
}); 
+1

Речь идет о функции обратного вызова. Можете ли вы показать нам 'sendSOAPRequest()'? – Marc

ответ

2

Я не уверен на 100%, какую библиотеку вы используете, но в некоторых из sendSOAPRequest вызовов в некоторых версиях вы должны установить переменную async в значение false, что заставляет их выполнять по одному за раз :

$(xmlHttpRequest.responseXML).find("Items").find("PowerPlant").each(function(index, item){  
    sendSOAPRequest(item, {async: false}); //Might be other syntax. Look at the doc for your library. 
}); 

Если это не работает, вы можете сделать, как Брэд M предлагает:

items = $(xmlHttpRequest.responseXML).find("Items").find("PowerPlant");   

function sendSoapReq(itemList){ 
    if(itemList.length > 0) 
    { 
     sendSOAPRequest(itemList.splice(0,1), function(){ 
      sendSoapReq(itemList); 
     }); 
    } 
} 

sendSoapReq(items); 
+0

О, мой бог ... Позор мне! Я использовал $ .ajax и я пропустил атрибуты asyn :( Большое спасибо! – RaspDealer

+1

Выполнение синхронного запроса будет «блокировать» браузер, что, как правило, нежелательно. Использование асинхронных и обратных вызовов является предпочтительным решением. –

0

Вы должны выполнить следующую итерацию цикла $ .each внутри полной функции обратного вызова запрос на мыло в.

Смежные вопросы