2017-02-26 56 views
0

我有1個POST Ajax和1個GET Ajax和我有這樣的:根據類型AJAX請求顯示LoadingGif的

$(document).ready(function() { 

     $(document).ajaxStart(function() { 
      $("#div28").show(); 
     }); 
     $(document).ajaxStop(function() { 
      $("#div28").hide(); 
     }); 

    }); 

它是用於顯示LoadingGif,在這一點上,顯示了兩個Ajax請求,那麼只有在POST類型ajax正在工作時,我應該怎麼做才能使LoadingGif顯示?

編輯: 這裏是我的ajax功能:

$(document).ready(function() { 
     $.ajax({ 
      contentType: "application/json; charset=utf-8", 
      type: 'GET', 
      url: 'api/Appointments/', 
      dataType: 'json', 
      success: function (result) { 
       if ((result.AppTime = "9:00") && (result.AppWithYritys = "Laakkonen")) { 
        document.getElementById("A9").style.background = "red"; 
       } 
       else { 
        alert("error1"); 
       } 
      }, 
      error: function (error) { 
       alert("error"); 
      }, 
     }); 
    }); 

和POST AJAX:

var request = $.ajax({ 
      type: "POST", 
      data: JSON.stringify(app), 
      url: "/api/Appointments", 
      contentType: "application/json", 
      dataType: "html" 
     }); 

     request.done(function (data) { 
      if (data != -1) { 
       alert("You Have successfully made an appointment"); 
       location.assign("http://tid.fi"); 
      } 
      else { 
       alert("There has been an error!"); 
      } 
     }); 

     request.fail(function (gr) { 
      location.assign("http://google.com"); 
     }); 
    }; 

POST AJAX是一個自定義的函數,它是一個按鈕,點擊觸發。只是一個信息。

+0

你可以顯示你的調用的Ajax實現,我不認爲這在你的$(document).ready函數中有效。 – jedgard

+0

嘗試使用[ajaxSend](https://api.jquery.com/ajaxSend/) –

+0

@ergwin當然,給我一分鐘。 – MicroDev

回答

4

使用ajaxSendajaxComplete你可以看到的請求「類型」是什麼

但是,你需要保持活躍請求的次數太多 - 可能不需要您簡單的頁面 - 但它的好,有

$(document).ready(function() { 
    var started = 0; 
    $(document).ajaxSend(function (event, jqXHR, settings) { 
     if (settings.type == 'POST') { 
      if(!(started++)) { // only need to show on the first simultaneous POST 
       $("#div28").show(); 
      } 
     } 
    }); 
    $(document).ajaxComplete(function (event, jqXHR, settings) { 
     if (settings.type == 'POST') { 
      if(!(--started)) { // only hide once all simultaneous POST have completed 
       $("#div28").hide(); 
      } 
     } 
    }); 
}); 

沒有櫃檯

$(document).ready(function() { 
    $(document).ajaxSend(function (event, jqXHR, settings) { 
     if (settings.type == 'POST') { 
      $("#div28").show(); 
     } 
    }); 
    $(document).ajaxStop(function() { 
     $("#div28").hide(); 
    }); 
}); 

這將顯示開機自檢,並隱藏一旦所有的AJAX已經停止解決方案 - 不太明顯,但它可能只是一個有效的解決方案

+0

很酷,雖然我不相信用這個計數器。 :) – jedgard

+0

好吧,如果你知道你只會有一個單一的POST請求在飛行中,那麼肯定,你不需要「內部」if語句 –

+0

實際上我可能會有多個請求,因爲它是一個約會預訂網站,所以這是很好的。答案也很好,確切而準確......非常感謝! :) – MicroDev

1

我認爲最簡單的方法是創建,您可以使用一個微小的功能:

function showLoading(isLoading){ 
     if(isLoading){ 
     $("#div28").show(); 
    } 
    else{ 
     $("#div28").hide(); 
    } 
}; 

然後用作爲記錄在這裏Ajax events

只是使用功能或者使用全局事件的具體職位或直接在beforeSendcomplete事件掛鉤上調用該函數。

+0

這是如何區分POST和GET的? –

+0

如果您有更好的方法,您可以繼續並提出解決方案。我只是直接從ajax方法調用函數。 – jedgard