多個ajax順序執行問題及ajax請求為同步時loading效果無意義的問題


  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(){
      ......
    });
  });
  .....
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM