上周發現一個jQuery ajax請求錯誤返回status 0和錯誤error的問題,responseText是"error",狀態碼是0而不是200:
$.ajax({ type: "POST", beforeSend: function(xhr){xhr.setRequestHeader('__RequestVerificationAntiCSRFToken', $("#hidden-CSRFToken").val());}, url: $(this).data('targetUrl'), cache: false, data:post_data, dataType:"json", async: true, error: function(jqXHR, error, errorThrown) { alert(jqXHR.status); }, success: function(data) { //... } });
分析問題,發現以上代碼沒有問題,請求根本沒有發送到后台,狀態碼是0表示沒有發出ajax請求。各個狀態含義:
- 0 - (未初始化)還沒有調用send()方法
- 1 - (載入)已調用send()方法,正在發送請求
- 2 - (載入完成)send()方法執行完成,
- 3 - (交互)正在解析響應內容
- 4 - (完成)響應內容解析完成,可以在客戶端調用了
jQuery ajax請求錯誤返回status 0和錯誤error的問題,分析可能的原因:
- url不存在(排除)
- url不可達(排除)
- 發送了跨域請求(排除)
- 數據格式錯(排除)
- ajax在完成之前請求已經被取消(ajax請求沒有發出),由於,例如:頁面已經跳轉或跳轉太快、瀏覽器輸入新的url、按鈕立即新的點擊等(確定)
修改方法是在原來的按鈕button的type="submit"改成"button",頁面不立即跳轉,問題排除。