$ .when函数数组无法正常工作

时间:2015-02-25 13:58:14

标签: jquery ajax jquery-deferred .when

我正在尝试解决的问题:我想要两个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上的工作示例以解决我的问题。

1 个答案:

答案 0 :(得分:3)

$.when不接受或期望一组函数,它期望一个 deferreds 数组。您需要调用您的函数,并传递承诺。

var topPriorityPromises = [];
topPriorityFunctions.push(showDiv());
topPriorityFunctions.push(getData());

$.when.apply($, topPriorityPromises ).then(function () {
  // ...

如果你简化了这个并忽略了数组/应用部分,你会以这种方式调用when,这是错误的:

$.when(showDiv, getData);

这样,这是正确的:

$.when(showDiv(), getData());