2016-08-04 127 views
6

如標題所述,我想知道將AJAX請求發送到控制器操作時會發生什麼,並且在此期間,在請求完成之前,網絡超時發生幾ms。當在向ASP.NET MVC的AJAX請求中發生網絡請求超時時會發生什麼操作

Reply from <Server IP>: bytes=32 time=31ms TTL=122 
Request timed out 
Reply from <Server IP>: bytes=32 time=28ms TTL=122 

考慮到超時只發生了幾個毫秒,這對我的AJAX請求有什麼影響?

這是我們在我們的應用程序中遇到的一個問題的延續,如SO question中所解釋的,我想知道它們是否有某種相關性。

我已經搜索了類似的問題,但找不到任何有用的東西。

編輯:除了對AJAX的影響,它會影響動作方法的行爲(服務器)嗎?

回答

3

該請求將「失敗」,這意味着它將輸入您的AJAX請求的onError狀態。狀態碼將爲0,因爲服務器沒有確定真實狀態碼的響應(例如200 OK或500 Internal Server Error)。

6

無論超時是否僅發生幾毫秒或更長時間,請求都會失敗。您的AJAX請求的success回調函數將不會執行,並且請求將以執行complete回調函數結束。默認情況下,所有AJAX請求的超時時間爲0毫秒(無限制),但會達到瀏覽器的默認超時時間。

當AJAX請求超時時,將調用error回調函數。這個函數的第二個參數是一個描述錯誤類型的字符串,在這種情況下,它的值將爲timeout。您可以通過處理此回調函數並可以選擇指定的超時值(如果不指定,工作在默認值)在AJAX請求主體處理請求超時:

$.ajax({ 
    ... 
    timeout: 5000, //specify the timeout value in milliseconds 
    error: function(jqXHR, textStatus, errorThrown) { 
     if(textStatus==="timeout") { 
      //code to execute when timeout occurs 
     } 
    } 
});​ 

此外,您還可以檢查是否請求通過檢查第二個參數是一個字符串,在complete回調函數中(以類似於上面所示的方式)超時,如果請求超時,它將具有值timeout

此外,請注意這一點:

超時時間開始於$就調用提出的觀點;如果有多個其他請求正在進行,並且瀏覽器沒有可用連接,則可能會在請求發送之前超時。

請求超時通常或者保留爲默認值,或者使用$ .ajaxSetup()設置爲全局默認值,而不是使用超時選項對特定請求重寫。

我會建議你使用替代HTTP/s的流量監測工具,如fiddler找到第二個請求背後的玄機。

更多信息:jQuery ajax documentation

+0

感謝您的詳細解答。至於您關於流量監控的建議,fiddler/chrome網絡選項卡僅顯示來自客戶端的單個請求。 –

0

在超時的情況下你的成功回調不會執行,所以你必須寫在客戶端的錯誤回調來處理這些問題。

在超時的情況下,您必須從服務器端引發一個異常,以便它將返回給客戶端,因爲錯誤是您可以處理超時的一種方式。

相關問題