ajax不执行success回调而是执行了error回调

ajax不执行success回调而是执行了error回调jquery

 

 

最近在看jQuery的API文档,在使用到jQuery的ajax时,若是指定了dataType为json,总是不执行success回调,而是执行了error回调函数ajax

附上代码以下:
JScript code:
数据库

复制代码 代码以下:json


$.ajax({
type: "post",
url: "jsp/loginManager.jsp",
data: "name=" + $('#rname').attr('value') + "&pwd=" + $('#pwd').attr('value'),
dataType: "text",
success: function(data) {
alert(data);
}
});
api


点击登录,成功链接数据库而且查询到了值(在loginManager.jsp页面有用System.out.print()打印过查询到的值)。但success里的东西不执行。用过断点,当执行完dataType后,success直接跳出,里面的alert()不执行,这是为何呢?
改了下代码,以下:
JScript code:
异步

复制代码 代码以下:jsp


$.ajax({
type: "post",
url: "jsp/loginManager.jsp",
async: true,
data: "name=" + $('#rname').attr('value') + "&pwd=" + $('#pwd').attr('value'),
dataType: "text",
success: function(data) {
alert(data);
},
error: function(e) {
alert(e);
}
});
async


可是仍是同样,没反应,只是把登录页面刷新了!!!
针对上面只是把登陆页面刷新了的问题,是a连接里有点小问题,原来我是a连接里面有href,开始,href=”",因此刷新了页面,刷新页面前进入了action,因此也得到了提交数据,可是还没来得及返回,就刷新了。改为href=”#”就ok了!正如:
<a href='#' onclick= ‘delMenuContent(cellvalue)>
还有一个缘由是由于我用的是异步提交,没等验证成功的时候已经执行了按钮的提交事件,因此页面已经刷新,将其改为同步提交,按钮的提交事件必须等ajax验证结束后判断是否进行提交就能够解决这个问题了!

最近在看jQuery的API文档,在使用到jQuery的ajax时,若是指定了dataType为json,总是不执行success回调,而是执行了error回调函数,极度郁闷。后面改成1.2.6版本能够执行。

  而后继续下载了几个jquery版本,如1.3.2,1.4.0的,指定dataType为json都不能执行success回调,只有小于1.3版本的才能执行success回调。

  最后去jquery的网站找到了在线的api文档看了下,地址:http://api.jquery.com/jQuery.ajax/ ,发现dataType以下的说明
  "json": Evaluates the response as JSON and returns a JavaScript object. In jQuery 1.4 the JSON data is parsed in a strict manner; any malformed JSON is rejected and a parse error is thrown. (See json.org for more information on proper JSON formatting.)

  原来是jquery1.4版本之后对json格式要求很是严格了,要知足json.org网站定义的格式才能执行success回调,不然都会出错,没法解析返回的json数据。说的是1.4+以上的,那为何下载的1.3.2指定dataType为json时也不能执行success回调呢?

  怪不得不执行,原来我返回的是{success:true,id:1} 这种不规则的字符串,不是严格的json格式,改为{"success":true,"id":"1"} 就能够正常执行success回调了。
  
  JSON格式总结下,详细的去json.org 查看。
  1)键名称:用双引号 括起
  2)字符串:用使用双引号 括起
  3)数字,布尔类型不须要 使用双引号 括起函数

相关文章
相关标签/搜索