84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
想在网页数据加载完成之前显示loading,待所有数据加载完成清除loading,一个页面有多个ajax异步请求,怎么判断全部请求都完成了?
闭关修行中......
添加一个计数,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); } })();
添加一个计数,ajax请求完成后计数+1,并在每次请求完成后都判断计数是否为所有ajax的数量,满足就清除loading
想到的有2种方法
一种是使用jquery自带的when
还有一种是设置全局变量
你都异步了,为啥还用loading,前后矛盾啊。
jquery支持promise啊
$.when($.ajax("..."), $.ajax("..."))
.done(function(){ alert("Success"); })
.fail(function(){ alert("Error"); });
浅谈js中多并发的一些处理方法