jQuery的ajax模塊封裝了非常強大的功能,有時候我們在發送一個ajax請求的時候希望能有一個超時的時間,想讓程序在一段時間請求不到數據時做出一些反饋。幸運的是jQuery為我們提供了這樣的參數:timeout。今天試了一下,做個記錄。
首先在試驗之前,有一個一直搞不明白的東西,那就是默認的超時時間是多少?這個配置在到底在什么地方設置。jQuery中?還是apache中?PHP中?
經過一番搜索,暫得到如下結論:
①jQuery沒有默認的超時時間,只可以通過參數來配置;
②apache2的默認超時時間是300秒,但是我在httpd.conf中設置Timeout 10,壓根沒起到作用,不明白是怎么回事
③php.ini中,只找到一個max_execution_time來配置腳本最長執行時間,貌似也沒什么關系
智商捉急。。。哪位高手知道,一定告訴一下我啊~~
下面來看jQuery中的timeout參數,值為Number類型,單位為毫秒。為了在超時的時候執行我們定義好的處理函數,可以把它放在error參數中,如下代碼:
$.ajax({ url : 's.php', timeout : 3000, error : function(xhr,textStatus){ console.log('error:'+textStatus); }, });
s.php中的內容為sleep(100)。這樣在3秒后會輸出error:timeout,textStatus即為錯誤的內容。這個還是很用的,如果你的error函數中還要進行其他處理,為了不與超時混在一起,可以這么寫:
error : function(xhr,textStatus){ if(textStatus=='timeout'){ //處理超時的邏輯 } else{ //其他錯誤的邏輯 } }
還可以把函數寫在complete中,因為無論success還是error,complete函數都會執行。
這下就可以輕松為超時指定動作了。不過在手工之前呢我還要小小的辟謠一下,因為在網上搜索文章的時候,有人如此描述timeout參數:會覆蓋掉全局的設置。看到這句我頓時菊花一緊,難道我在這里設一次,頁面上再用$.ajax的時候都會在3秒后超時?跑去官網一看文檔,原句子是這么寫的:“This will override any global timeout set with$.ajaxSetup().”,原來是會覆蓋掉$.ajaxSetup()中的設置,如果我壓根就沒用$.ajaxSetup()這個函數,便什么事都沒有。