关于jQuery ajax 状态码status为0,一直返回error

问题:为struts2的form表单submit提交按钮设置点击事件,点击事件触发ajax异步处理,完成异步提交操作。但是一直出现status为0,一直返回error的错误。


<script type="text/javascript">   
        function doInsert() {
        $.ajax({
            url:'newsInsert.action',
            data:{"title":$("#title").val(),"content":$("#content").val()},
            dataType:'json',
            type:'post',
            success:function (obj) {
                var jsonObj = eval('(' + obj + ')');
                if (jsonObj.flag) {
                    $("#alertDiv").attr("class","alert alert-success");
                    $("#alertText").text("新闻添加成功!");
                } else {
                    $("#alertDiv").attr("class","alert alert-error");
                    $("#alertDiv").text("新闻添加失败!");
                }
                $("#alertDiv").fadeIn(1000,function () {
                    $(this).fadeOut(3000);
                })
                $("#title").val("");
                $("#content").val(null);
            },
            error:function (XMLhttpServlet) {
                alert("readystate->" + XMLhttpServlet.readyState);
                alert("status->" + XMLhttpServlet.status);
                alert("网络故障!");
            }
        });
    }
    
    </script>


分析:经过比较粗糙的调试,一步一步的alert出错误。在$.ajax()中的error alert出XMLhttpServlet.readyState为0,XMLhttpServlet.status也为0,检查了url,dataType,以及客户端的json格式都没有错误,可是问题出在哪里呢?

检查了$.ajax()方法后,发现没什么问题。然后就换了原生的ajax来看看问题出在哪里。


<script language="javascript">  
    var xmlHttp;  
    function createXMLHTTP() {  
        if(window.XMLHttpRequest){        
            xmlHttp = new XMLHttpRequest() ;  
        } else {    //表示IE内核的浏览器  
            xmlHttp = new ActiveXOject("Microsoft.XMLHTTP") ;  
        }  
    }  
    function doInsert(){  
        createXMLHTTP();  
        xmlHttp.open("POST","newsInsert.action") ;  
        xmlHttp.onreadystatechange = getInsert;  
        xmlHttp.send(null) ;  
    }  
    function getInsert(){ //定义回调函数  
	alert(xmlHttp.readyState);
        if(xmlHttp.readyState == 4){  
	    alert(xmlHttp.status);        
	    if(xmlHttp.status == 200){  
                
            }  
        }  
    }  
  
 </script>  

然后发现当readyState 为4,说明响应内容解析完成,客户端可以调用了。可是status 为0,这说明已经快要找到问题所在了。这里status为0,有下列几种情况:

(1). url不存在

(2). url不可到达

(3). 发送了跨域请求

(4). 数据格式出错

(5). ajax在调用之前,就已经取消了。也就是说根本没有调用这个ajax请求。

经过逐一的排除,(1)、(2)、(3)、(4)都排除掉了,就剩下(5)了。然后我就再仔细检查了一下我的jsp的form表单,果然,发现提交按钮type="submit",这里type为submit,当点击提交按钮时,由于type="submit",表单提交,页面跳转,ajax请求根本就没有发出,所以status为0。要排除问题,只需要将提交按钮的type="submit"改为type="button",问题即可解决。

解决方法:将form表单的提交按钮的type="submit"改为type="button"。


下面来总结一下:type="submit"和type="button"的区别。

submit是button的一个特例,也是button的一种,它把提交这个动作自动集成了。
如果表单在点击提交按钮后需要用JS进行处理(包括输入验证)后再提交的话,通常都必须把submit改成button,即取消其自动提交的行为,否则,将会造成提交两次的效果,对于动态网页来说,也就是对数据库操作两次。或者在使用submit时验证时加return true或false。

submit和button,二者都以按钮的形式展现,看起来都是按钮,所不同的是type属性和处发响应的事件上,submit会提交表单,button不会提交表单.
两者主要区别在于:
submit默认为form提交,可以提交表单(form).
button则响应用户自定义的事件,如果不指定onclick等事件处理函数,它是不做任何事情.当然,button也可以完成表单提交的工作.
INPUT   type=submit 即发送表单,按回车提交表单   
INPUT   type=button 就是单纯的按钮功能,提交的是innerTEXT

注:type="submit"和type="button"的区别 转载于:http://blog.sina.com.cn/s/blog_693d183d0100uolj.html


  • 6
    点赞
  • 4
    收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:技术黑板 设计师:CSDN官方博客 返回首页
评论 3

打赏作者

CoderBruis

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值