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