2017-10-11 152 views
2

我已經注意到谷歌瀏覽器的一些奇怪的行爲:Ajax請求掛在Chrome瀏覽器後連接丟失

  • 如果我們發送POST Ajax請求時,有沒有網絡連接,我們得到的控制檯err_internet_disconnected異常(和我認爲,這是確定)
  • 如果我們給長崗Ajax請求,失去這個請求,谷歌Chrome不會中止它,就在控制檯和devconsole的網絡選項卡中沒有err_internet_disconnected外,這個請求被標記爲未決期間的網絡連接(即使連接出現)。事實上,這個連接掛起,沒有機會在js代碼中處理這個(我們希望得到ajax錯誤,但沒有任何反應)。

你有什麼建議,如何處理這個問題?

編輯: 的代碼示例:

$.ajax({ 
    url: "https://someserver.com/ws.asmx/ExecuteEx?pureJson", 
    type: "POST", 
    contentType: "application/json", 
    data: data, 
    success: function() { 
     console.log("success"); 
    }, 
    error: function() { 
     console.log("error"); 
    } 
}) 

我試着在Chrome瀏覽器開發控制檯這段代碼在這個頁面在編輯這篇文章。屏幕截圖如下。 第一個請求是我的。我發送了它,然後拔掉了網線。 第二個請求失敗(因爲拔下網線)。 然後我插入網線,第三個請求成功。但是第一個請求仍然有未決狀態(儘管網絡連接丟失)。

devconsole's network tab

+0

您可以發佈您的Ajax代碼? – DiskJunky

+0

@DiskJunky,是的,我已經編輯這篇文章 – SkillZ

+0

你有沒有設置'timeout'財產?查看[爲Ajax設置超時(jQuery)](https://stackoverflow.com/questions/5225597/set-timeout-for-ajax-jquery)。如果超時過期後連接丟失,應該中止請求。你有沒有測試任何其他瀏覽器如FireFox或IE? – Igor

回答

0

設置timeout財產。這應該中止請求,如果超時過期後連接丟失。

$.ajax({ 
    url: "https://someserver.com/ws.asmx/ExecuteEx?pureJson", 
    type: "POST", 
    contentType: "application/json", 
    data: data, 
    timeout: 1000, // value in milliseconds 
    success: function() { 
     console.log("success"); 
    }, 
    error: function() { 
     console.log("error"); 
    } 
}) 

又見ajax documentation

timeout

設置請求的超時時間(以毫秒爲單位)。值爲0意味着不會有超時。這將覆蓋使用$ .ajaxSetup()設置的全局超時。超時時間從$ .ajax調用開始;如果有多個其他請求正在進行,並且瀏覽器沒有可用連接,則可能會在請求發送之前超時。

0

嘗試更換到$誤差函數。阿賈克斯({與此代碼,並比較結果

error: function (request, status, error) { 
     console.log(request.responseText); 
     console.log(request.status); 
     console.log(request.error); 
    } 

我希望幫助。

+0

它沒有幫助( – SkillZ

相關問題