jquery – 延迟和Ajax

前端之家收集整理的这篇文章主要介绍了jquery – 延迟和Ajax前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
像这样读 JSON-Service:
$.ajax({
  url:'activeIDs',success : function(data){ // data = [14,15]
    var tableRows = [];
    for (var dataIndex=0; dataIndex < data.length; dataIndex++) {
      var isLast = dataIndex == (data.length - 1);
      $.ajax({
        url: 'info?id=' + data[dataIndex],success: function(data2) { // "foo","bar"
          tableRows.push(data2.name);
          if (isLast) {
            alert(tableRows.length);
          }
        }
      });
    }
  }
});

第一个网络跟踪是:

> activeIDs = [14,15]
> info?id = 14(需要2秒)=“foo”
> info?id = 15(需要4秒)=“bar”

在这种情况下,警报给出“2”.

秒网络跟踪是不同的:

> activeIDs = [14,15];
> info?id = 14(需要20秒)=“foo”(现在需要很长时间)
> info?id = 15(需要1秒)=“bar”

在这种情况下,警报在一秒钟后给出1,这很糟糕!

题:

如何使用$.Deferred而不是isLast?

解决方法

在发出警报之前,您需要等待所有请求完成.
$.ajax({
  url:'activeIDs',15]
    var tableRows = [];
    var requests = [];
    for (var dataIndex=0; dataIndex < data.length; dataIndex++) {
      var isLast = dataIndex == data.length;

      var request = $.ajax({
        url: 'info?id=' + data[dataIndex]
      }).done(function(data2) { // "foo","bar"
        tableRows.push(data2.name);
      });

      requests.push(request);
    }

    // wait for all requests to finish here
    $.when(requests).then(function(){
      // all success functions have been called and updated things appropriately
      alert(tableRows.length);
    }
  }
});

这假设所有请求都成功.它看起来也有一些拼写错误

> tableRows在哪里更新?
>条目定义在哪里?

编辑现在使用promise样式成功处理程序.应该在调用$.when()之前将结果推送到tableRows.然后回调

原文链接:https://www.f2er.com/jquery/178374.html

猜你在找的jQuery相关文章