Heim > Fragen und Antworten > Hauptteil
想在网页数据加载完成之前显示loading,待所有数据加载完成清除loading,一个页面有多个ajax异步请求,怎么判断全部请求都完成了?
巴扎黑2017-04-11 09:25:13
添加一个计数,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);
}
}
})();
高洛峰2017-04-11 09:25:13
想到的有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();
})
// ...
阿神2017-04-11 09:25:13
jquery支持promise啊
$.when($.ajax("..."), $.ajax("..."))
.done(function(){ alert("Success"); })
.fail(function(){ alert("Error"); });
怪我咯2017-04-11 09:25:13
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中多并发的一些处理方法
阿神2017-04-11 09:25:13
(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);
}
})();