簡體   English   中英

在對ASP.NET MVC Action的AJAX請求期間有網絡請求超時時會發生什么

[英]What happens when there is network request time out during AJAX request to ASP.NET MVC Action

如標題中所述,我想知道將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問題中所解釋的那樣,我想知道它們是否以某種方式相關。

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

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

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

當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 ,它將具有timeout值。

另外,請注意:

超時時間從$ .ajax調用點開始; 如果其他幾個請求正在進行且瀏覽器沒有可用的連接,則請求可能會在發送之前超時。

請求超時通常保留為默認值或使用$ .ajaxSetup()設置為全局默認值,而不是使用timeout選項覆蓋特定請求。

我建議你使用像fiddler這樣的替代HTTP / s流量監控工具來找到第二個請求背后的謎團。

更多信息: jQuery ajax文檔

請求將“失敗”,這意味着它將進入AJAX請求的onError狀態。 狀態代碼將為0,因為服務器沒有響應來確定實際狀態代碼(例如200 OK或500內部服務器錯誤)。

如果超時,您的成功回調將不會執行,因此您必須在客戶端編寫錯誤回調來處理此類問題。

如果超時,您必須從服務器端引發異常,以便它作為錯誤回到客戶端,這是您可以處理超時的一種方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM