我有一段代码,我想在所有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