我正在尝试在内部发出肥皂请求,.each()
但 jQuery 在第一个肥皂请求完成之前执行下一个对象(在列表中)。我怎样才能把它锁起来?
例如:
$(xmlHttpRequest.responseXML).find("Items").find("PowerPlant").each(function(index, item){
sendSOAPRequest(item);
});
我不是 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.
});
如果这不起作用,您可以按照 Brad 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);
您需要在soap 请求的完整回调函数中执行$.each 循环的下一次迭代。