ajax 執行成功以后返回的數據走的是error方法而不是success方法的問題


今天在一個功能的時候發現寫的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個的,所以問題不在這。
以上就我遇到這個問題時到解決這個問題的總結,希望對大家有所幫助,也希望自己能夠引以為戒,多思考,避免這種小錯誤的出現。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM