1. 程式人生 > >ajax請求狀態碼為0的解決辦法

ajax請求狀態碼為0的解決辦法

strong ron led error: 發出 作者 () PE chan

原文鏈接:https://blog.csdn.net/changqing5818/article/details/53932463

前言

今天遇到個奇怪的問題,使用JQuery的ajax請求,後臺的Controller層也接收到請求了,一切處理很正常,但是很奇怪,瀏覽器Debug發現,responseText是”error”,狀態碼是0而不是200.

請求源碼如下

$.ajax({
    type: "POST", 
    url: targetUrl, 
    cache: false, 
    data:post_data, 
    dataType:"json", 
    async: true, // 默認為異步請求 
    error: function(error) { 
        console.log(error); 
    }, 
    success: function(data) {
        //... 
    } 
});    

狀態含義

  • 0 - (未初始化)還沒有調用send()方法
  • 1 - (載入)已調用send()方法,正在發送請求
  • 2 - (載入完成)send()方法執行完成
  • 3 - (交互)正在解析響應內容
  • 4 - (完成)響應內容解析完成,可以在客戶端調用了

問題分析

Query ajax請求錯誤返回status 0和錯誤error的問題,分析可能的原因:

  • url不存在(排除) – Controller層定義正確
  • url不可達(排除) – 後臺確實接收到請求了,而且處理正確
  • 發送了跨域請求(排除) – 使用CORS Filter, 測試發現也不是
  • 數據格式錯(排除) – 瀏覽器和後臺調試發現,數據格式正確
  • ajax在完成之前請求已經被取消(ajax請求沒有發出) – 確實是canceled,但是請求確實發出了
  • 請求超時 – 確認問題

解決辦法

  • 使用異步請求
  • 將timeout時長設置稍長一點
$.ajax({ 
    type: "POST", 
    url: targetUrl, 
    cache: false, 
    data : post_data, // 傳參 
    dataType : "json", 
    async: false, // 使用同步操作 
    timeout : 50000, //超時時間:50秒 
    error: function(error) {
        console.log(error); 
    }, 
    success: function(data) { 
        //... 
    } 
});    

版權聲明:作者寫博是為了總結經驗,和交流學習之用。 如需轉載,請在文章頁面明顯位置給出原文連接。謝謝!如有問題,請留言!

ajax請求狀態碼為0的解決辦法