1

我处于需要使用多个 AJAX 调用创建表的情况。我发出一个 ajax 请求并获得一个带有元素数组的 JSON 对象(比如说 5 个)。通过 for 循环运行它,并在每个 ajax 请求的响应中使用来自当前循环元素和当前 ajax 调用的部分数据创建一行,然后将其添加到表中的一行中。(对不起我的语法不好)

我想知道如何使用延迟对象来实现这一点?如果我的理解是正确的,这应该更简单地使用延迟对象来实现?正确的?

我目前的实现

$.ajax{
    //options
    success : function(data){

    // add col1, col2, col3 from first ajax call
        $(data).each(function(i,e){
            
            // make ajax request based on inputs from current loop element
            $.ajax({
                //options
                success: function(data) {
                    // add col5, col6 from first ajax call
                    // add col7, col8 from current loop element
                    // add <tr> to the table
                }
            });
            
        });
    
    }
}
4

1 回答 1

2

是否要等到所有 ajax 调用都返回后再更新 DOM?如果您不需要这样做,那么您无需使用 $.Deferred 即可。只需在每个“成功”回调中更新 DOM。

如果您确实想等到所有呼叫都返回,那么您可以执行以下操作:

var promises = [];

$(data).each(function(i,e){

  // make ajax request based on inputs from current loop element
  promises.push($.ajax({ 
    // stuff 
  }));

});

$.when(promises).done(function() {
  // Update the DOM
});

我还没有尝试过,所以可能存在语法错误,但想法是 ajax 调用返回一个“承诺”。这本质上是一个承诺,在未来的某个时候,它将履行其职责。因此,您将所有的 Promise 推送到一个数组中,然后您可以使用 $.when 函数在所有 Promise 都满足时执行一些代码。

于 2012-10-30T13:38:45.403 回答