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

问题:为struts2的form表单submit提交按钮设置点击事件,点击事件触发ajax异步处理,完成异步提交操做。可是一直出现status为0,一直返回error的错误。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("网络故障!");

}

});

}

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

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

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){

}

}

}

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

(1). url不存在ajax

(2). url不可到达数据库

(3). 发送了跨域请求json

(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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值