2

我正在尝试在内部发出肥皂请求,.each()但 jQuery 在第一个肥皂请求完成之前执行下一个对象(在列表中)。我怎样才能把它锁起来?

例如:

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

2 回答 2

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.
});

如果这不起作用,您可以按照 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);
于 2013-03-05T15:25:30.360 回答
0

您需要在soap 请求的完整回调函数中执行$.each 循环的下一次迭代。

于 2013-03-05T14:58:55.350 回答