ajax是一種常用的網頁局部刷新技術,當請求數據時間較長或防止用戶多次點擊等情況下,會在請求數據的過程中添加loading效果,提高用戶體驗。
當需要執行多個ajax並需要考慮執行順序時,可以使用ajax嵌套、同步、回調三個方法。
1、ajax嵌套:
$.ajax({
url : "url",
data : data,
type : "POST",
dataType:"json",
success : function(result,status,xhr) {
$.ajax({
url : "url",
data : data,
type : "POST",
dataType:"json",
success : function(result,status,xhr) {
},
});
},
});
2、同步
ajax請求設置為同步請求,這時執行ajax執行結束前不會執行之后的代碼,保證ajax的執行順序,但同時ajax之前的調用showLoading在整個方法執行完以后才會生效,這就導致loading效果毫無意義。我們可以使用setTimeout來解決這個問題。
如showLoadingTimeout方法把需要先生效之外的代碼放入setTimeout方法內,延遲0秒后執行。以此來解決這個問題。
$.ajax({
url : "url",
data : data,
type : "POST",
dataType:"json",
async:false,
success : function(result,status,xhr) {
},
});
function showLoadingTimeout(fun){
showLoading();//loading效果展示方法
if(typeof fun == "function"){
setTimeout(function(){
fun();
},0)
}
}
3.回調
嵌套升級版
function fun1(fun){
$.ajax({
url : "url",
data : data,
type : "POST",
success : function(result,status,xhr) {
if(typeof fun == "function"){
fun();
}
},
});
}
function fun2(fun){
$.ajax({
url : "url",
data : data,
type : "POST",
success : function(result,status,xhr) {
if(typeof fun == "function"){
fun();
}
},
});
}
function fun(){
....
fun2(function(){
fun1(function(){
......
});
});
.....
}