ajax中的timeout設置


jquery的$.ajax()中,有一個timeout的屬性,用來設置超時時間,使用complete判斷TextStatus的值是否為timeout,執行相應的操作。

代碼如下:

$.ajax({
  url: 'ajax.php',
  type: 'post',
  data: postData,
  timeout: 8000,//設置超時時間為8s
  success: function(data){
    console.log(data)
  },
  complete:function(XHR,TextStatus){
    if(TextStatus=='timeout'){ //超時執行的程序
      console.log("請求超時!");
    }
  }
})

問題

ajax中async屬性的默認值為true,即異步狀態,$.ajax執行后,會繼續執行ajax后面的腳本,直到服務器端返回數據后,觸發$.ajax里的success方法,這時候執行的是兩個線程。
若要將其設置為false,則所有的請求均為同步請求,在沒有返回值之前,同步請求將鎖住瀏覽器,用戶其它操作必須等待請求完成才可以執行。
這時,timeout屬性失效,頁面會在請求同步ajax的時候進入假死狀態,直到請求有返回結果。

目前解決方案:避開同步ajax,使用異步代替。


免責聲明!

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



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