javascript - 如何判断多个Jquery.ajax全部请求完毕?
阿神
阿神 2017-04-11 09:23:13
0
6
1311

想在网页数据加载完成之前显示loading,待所有数据加载完成清除loading,一个页面有多个ajax异步请求,怎么判断全部请求都完成了?

阿神
阿神

闭关修行中......

répondre à tous(6)
巴扎黑

添加一个计数,ajax请求完成后计数+1,并在每次请求完成后都判断计数是否为所有ajax的数量,满足就清除loading

(function () {
  var count = 0;
  var result = {};

  $.get('http://data1_source', function (data) {
    result.data1 = data;
    count++;
    handle();
    });
  $.get('http://data2_source', function (data) {
    result.data2 = data;
    count++;
    handle();
    });
  $.get('http://data3_source', function (data) {
    result.data3 = data;
    count++;
    handle();
    });

  function handle() {
    if (count === 3) {
      var html = fuck(result.data1, result.data2, result.data3);
      render(html);
    }
  }
})();
小葫芦

想到的有2种方法
一种是使用jquery自带的when

$.when($.ajax(), $.ajax()).then(function(){
    // 结束
})

还有一种是设置全局变量

var ajaxCount = 10 ; 
var ajaxFinished = function(){
    if(ajaxCount > 0){// do nothing}
    else{
      // 请求全部完成,做该做的事情
    }
}

$.ajax(xxx1).then(function(){
  ajaxCount --; 
  ajaxFinished(); 
});
$.ajax(xxx2).then(function(){
  ajaxCount --; 
  ajaxFinished(); 
})
// ...
左手右手慢动作

你都异步了,为啥还用loading,前后矛盾啊。

阿神

jquery支持promise啊

$.when($.ajax("..."), $.ajax("..."))
 .done(function(){ alert("Success"); })
 .fail(function(){ alert("Error"); });

刘奇
var d1 = $.Deferred();
var d2 = $.Deferred();
 
function async1(){
    d1.resolve( "Fish" );
}
 
function async2(){
    d2.resolve( "Pizza" );
}
 
$.when( d1, d2 ).done(function ( v1, v2 ) {
    console.log( v1 + v2 + '已完成');
});

浅谈js中多并发的一些处理方法

阿神
(function () {
  var count = 0;
  var result = {};

  $.get('http://data1_source', function (data) {
    result.data1 = data;
    count++;
    if (count === 3) {
        handle();
    }
    });
  $.get('http://data2_source', function (data) {
    result.data2 = data;
    count++;
    if (count === 3) {
        handle();
    }
    });
  $.get('http://data3_source', function (data) {
    result.data3 = data;
    count++;
    if (count === 3) {
        handle();
    }
    });

  function handle() {
      var html = fuck(result.data1, result.data2, result.data3);
      render(html);
  }
})();
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal