我需要等到我所有的ajax函數都完成了,然後繼續執行。等到所有的ajax請求都完成
我的特殊情況是,我需要在提交表單之前先翻譯表單中的某些字段。我通過ajax調用將它們翻譯爲外部網站。取決於我需要做更多或更少翻譯的形式中的一些值。當所有的翻譯完成後(如果有的話),我必須用ajax驗證表單,如果有效,然後提交。
這是我的aproach:
首先,我必須發送Ajax調用的函數,並與接收到的數據做的東西:
function translate(...) {
$("#ajaxCounter").val(parseInt($("#ajaxCounter").val()) + 1);
$.ajax({
...
success:function(data) {
...
$("#ajacCounter").val(parseInt($("#ajaxCounter").val()) - 1);
}
});
然後,當表單是我執行以下提交代碼:
$("#form").submit(function() {
translatable_fields.each(function() {
translate(...);
});
while (parseInt($("#ajaxCounter").val()) > 0) { null; }
if (!(this).hasClass('ready')) {
$.ajax({
//validation
success: function(data) {
if (data['isValid']) {
$("#form").addClass('ready');
$("#form").submit();
}
}
});
}
return true;
});
的問題是,while
循環中提交功能永遠不會結束。
如果我執行的代碼沒有while
循環,我可以看到ajaxCounter
輸入在翻譯功能開始時增加,在結束時減少。
$(「#form」)。submit();該代碼應該做什麼? –
嘗試使用遞歸setTimeout而不是使用while循環。 while循環鎖定線程,因此無法從#ajaxCounter獲取新數據。 –
我很努力去理解代碼應該做什麼 – garryp