欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ajax 执行成功以后返回的数据走的是error方法而不是success方法的问题

程序员文章站 2022-03-20 20:59:04
今天在一个功能的时候发现写的ajax的方法执行后台代码成功后返回前台时执行的是error方法而不是success方法,代码如下 以前也会这么写的,就没有什么问题,调试了好久,还是走的error方法,最后发现,当dataType为“json”而返回的又不是json时,肯定会出错,所以若返回的类型不是j ......

今天在一个功能的时候发现写的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个的,所以问题不在这。
以上就我遇到这个问题时到解决这个问题的总结,希望对大家有所帮助,也希望自己能够引以为戒,多思考,避免这种小错误的出现。