今天在一個功能的時候發現寫的ajax的方法執行后台代碼成功后返回前台時執行的是error方法而不是success方法,代碼如下
jQuery('#form').ajaxSubmit({ type: "post", url: "XXX.do?",//請求的 URL地址 data: jQuery('#form').serialize(), dataType: "json", error: function (data) { alert(data); }, success: function (data) { var result = eval('(' + data + ')'); if (result.success) { if (result.newPath != "") { alert(result.res); } else { alert(result.res); } } } });
以前也會這么寫的,就沒有什么問題,調試了好久,還是走的error方法,最后發現,當dataType為“json”而返回的又不是json時,肯定會出錯,所以若返回的類型不是json,這一個屬性可以不填。而我從后台返回的數據不是json格式的,所以會走error,而不是走的success方法,最終將dataType的屬性給去掉就正常走success方法了。
在解決這個問題的過程中,通過網上查詢,發現也有其他原因導致這個問題的出現,現總結如下
Ajax請求通過XMLHttpRequest對象發送請求,該對象有四個狀態(readyState):
0-未初始化、1-正在初始化、2-發送數據、3-正在發送數據、4-完成。
當XMLHttpRequest.readyState為4時,表示ajax請求已經完成可以得到響應結果。
ajax的success和error方法根據響應狀態碼來觸發。當XMLHttpRequest.status為200的時候,表示響應成功,此時觸發success().其他狀態碼則觸發error()。
除了根據響應狀態碼外,ajax還會在下列情況下走error方法:
1. 返回數據類型不是JSON
2. 網絡中斷
3. 后台響應中斷
可以知道,竟然后台的代碼都執行了,那狀態碼肯定是已經經過了這4個的,所以問題不在這。
以上就我遇到這個問題時到解決這個問題的總結,希望對大家有所幫助,也希望自己能夠引以為戒,多思考,避免這種小錯誤的出現。