我正在尝试理解jQuery的Deferred
,但是尽管有样本,但我无法达到我想做的目的。
所以,我想异步调用2个函数,当BOTH结束时,再调用另一个函数。
这是我的代码
function1();
function2();
function3();
function1()
和function2()
对我的ASP.NET应用程序进行ajax调用,它们完美无缺。它们必须在function3()
开始之前结束。
我正在阅读并再次阅读the documentation但是function3()并不等待其他两个人的结束。您能否提供一些样本以便我了解Deferred
?我真的需要他们来完成我项目的一个重要部分。
非常感谢你。
奖金问题
我已经阅读了.when
延迟...可以在某些<div>
元素中写入类似 function1()运行,然后 function2( )运行等......?
更新
有关function1()
和function2()
的更多详细信息:它们非常相似,这是它们的正文:
function function1() {
return $.ajax({
url : "@Url.Action("MyMethod", "MyController")",
contentType : "application/json; charset=utf-8",
dataType : "json"
}).done(function(data) {
$.each(data, function(index) {
pushDatas(data[index]);
})
}).fail(function (result) {
alert("function1failed");
});
}
function pushDatas(data)
{
if(!($.inArray(data, loadedDatas) !== -1)) {
loadedDatas.push(data);
}
}
更新2
这些函数的调用如下:
<script type="text/javascript">
$(document).ready(function () {
//some others asynchrounous functions
$.when(function1(), function2()).done(function3("test"));
}
...
</script>
答案 0 :(得分:1)
function1和function2必须返回promise对象才能生效。例如,
function function1 () {
return $.ajax({...});
}
现在您可以使用$.when
$.when(function1(),function2()).done(function3);
编辑:或:
$.when(function1(),function2()).done(function(){
function3("test");
});