2017-04-10 43 views
0

使用jQuery when()时,我试图在表单提交上运行多个Ajax函数,等到他们得到响应并完成后,最后提交表单。我的代码是:使用when()来运行多个Ajax函数

$('form[name="regForm"]').on('submit', function(e) { 
    e.preventDefault(); 

    $.when(function() { 
     ajaxOne(); 
     ajaxTwo(); 
     ajaxThree(); 
    } 
    ).done(function() { 
     $('form[name="regForm"]').unbind('submit').submit(); 
    }); 
}); 

表单被提交,但Ajax函数从不触发。我究竟做错了什么?谢谢你的帮助。

+0

是否在页面重新加载时发生提交?你有没有检查上述事件是否被触发?控制台中的任何错误? – charlietfl

+0

表单不会被提交,但Ajax函数不会被执行。 –

+0

'ajaxOne'应该返回来自呼叫的承诺。请至少显示其中一个功能的代码。 –

回答

2

你已经写了$.when()正确

每个Ajax调用的承诺应该是一个参数(或jQuery的3+可以承诺的阵列)

$(function(){ 
    $('form[name="regForm"]').on('submit', function(e) { 
     e.preventDefault(); 

     $.when(ajaxOne(), ajaxTwo(), ajaxThree() 
     ).done(function() { 
      $('form[name="regForm"]').unbind('submit').submit(); 
     }); 
    }); 
}); 

这还假定形式的选择是正确的,每个AJAX功能返回$.ajax承诺像

function ajaxOne()(
    return $.ajax({...})  
} 
+0

谢谢,charlietfl。我的语法错了。 –

0

你必须作为参数传递

$.when.apply($, arrayOfDefferds).done(doStuff); 

负责获取响应。