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

  • 相关阅读:
    eclipse无法启动问题记录
    java环境配置
    Tomcat配置,Myeclipse破解和各种设置
    Android_Service详解及实例
    WTF
    jQuery实现图片轮播
    jQuery实现皮肤自定义
    CSS中的transform与transition
    checkbox实现全选/全不选
    ng-if可见
  • 原文地址:https://www.cnblogs.com/mingqi-420/p/10931717.html
Copyright © 2020-2023  润新知