我正在尝试解决的问题:我想要两个ajax函数数组。一个应该首先运行topPriority,另一个具有低优先级,一个topPriority调用完成后立即启动。
但是,甚至在$.when
行中都没有调用此函数。我是否正确使用了这个?
// Html:
<div id="foo">Hello World</div>
// CSS:
#foo{ border:1px solid red; padding:10px; display:none }
//使用Javascript:
// open your console!
function getData(){
return $.get('/echo/html/');
}
function showDiv(){
var dfd = $.Deferred();
$('#foo').fadeIn( 1000, dfd.resolve );
return dfd.promise();
}
var topPriorityFunctions = new Array();
topPriorityFunctions.push(showDiv);
topPriorityFunctions.push(getData);
$.when.apply($, topPriorityFunctions )
.then(function( ajaxResult ){
console.log('The animation AND the AJAX request are both done!');
// ‘ajaxResult’ is the server’s response
// start my lowPriorityTasks.
});
Here是所有这些代码的小提琴,以便能够对其进行测试并进行修改。
参考:我试图修改此page上的工作示例以解决我的问题。
答案 0 :(得分:3)
$.when
不接受或期望一组函数,它期望一个 deferreds 数组。您需要调用您的函数,并传递承诺。
var topPriorityPromises = [];
topPriorityFunctions.push(showDiv());
topPriorityFunctions.push(getData());
$.when.apply($, topPriorityPromises ).then(function () {
// ...
如果你简化了这个并忽略了数组/应用部分,你会以这种方式调用when
,这是错误的:
$.when(showDiv, getData);
不这样,这是正确的:
$.when(showDiv(), getData());