為jQuery的$.ajax設置超時時間


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()這個函數,便什么事都沒有。


免責聲明!

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



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