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,使用異步代替。