我有一段代碼,我想在所有ajax完成後運行。 我想運行的功能是:jquery Ajax回調沒有按正確順序工作
function autoContinueCart(){
$('.nextSection a:visible').click();
}
該點擊事件運行驗證腳本,並移動到下一部分。繼承人主要阿賈克斯。
$('#SubmitLoginOpc').click(function() {
$.ajax({
type:'POST',
url:authenticationUrl,
async:false,
cache:false,
dataType:"json",
data:'SubmitLogin=true&ajax=true&email=' + encodeURIComponent($('#login_email').val()) + '&passwd=' + encodeURIComponent($('#login_passwd').val()) + '&token=' + static_token,
success:function (jsonData) {
if (jsonData.hasError) {
//error stuff
}
else {
// update token
static_token = jsonData.token;
$('#dlv_label, #new_label').removeClass('new-l').addClass('logged-l'); // change label on delivery address section
updateNewAccountToAddressBlock();
// RESET ERROR(S) MESSAGE(S)
$('#opc_account_errors').html('').hide();
$('#opc_account_errors_invoice').html('').hide();
//It doesnt work here
//autoContinueCart();
}
},
//doesnt work here
// complete:autoContinueCart
});
return false;
});
我已經把這個函數調用放在成功的一部分,我認爲它會工作,因爲它是同步的。在ajax調用之後,我也把它作爲完整的.done函數,並且在所有內部代碼完成之前它仍然運行。函數updateNewAccountToAddressBlock();
基本上使用這種類型async:true
產生另一個jquery ajax請求,並返回json,然後在成功調用中使用約10個函數或子函數。其中一個使用這些數據來填寫表單的所有字段。我試圖在最後調用的函數應該驗證正在填充的信息。但無論我嘗試什麼,驗證都會失敗,因爲autoContineCart正在填充字段之前運行。我也嘗試使用像updateNewAccountToAddressBlock(updateAddressSelection);
這樣的回調,然後檢查回調函數,它也沒有工作。任何人都有一個想法,我可能做錯了什麼?
使用'異步:FALSE'是不是一個解決方案,你只是使問題變得更糟。看看延期的jQuery,並承諾對象。 – elclanrs 2014-09-04 18:33:06
因此,因爲有些東西是「填充領域」,有沒有辦法知道什麼時候完成?在那裏掛鉤你的方法? – 2014-09-04 18:33:17
爲什麼不嘗試使用'ajaxStop'全局事件處理程序來調用autoContineCart方法。但只有在沒有正在處理的Ajax請求時纔會觸發它。 – Karthik 2014-09-04 18:38:33