ajax的判断回调,ajax不执行success回调而是执行了error回调

本文讲述了作者在使用jQuery的ajax时遇到的问题,由于dataType设为json,返回的数据不符合1.4及以上版本的严格JSON格式,导致success回调未执行。解决办法包括检查数据格式、指定正确的JSON格式以及理解jQuery版本对JSON格式的要求。
摘要由CSDN通过智能技术生成

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

更新时间:2012年12月10日 17:39:42   作者:

最近在看jQuery的API文档,在使用到jQuery的ajax时,如果指定了dataType为json,老是不执行success回调,而是执行了error回调函数,极度郁闷

附上代码如下:

JScript code:

$.ajax({

type: "post",

url: "jsp/loginManager.jsp",

data: "name=" + $('#rname').attr('value') + "&pwd=" + $('#pwd').attr('value'),

dataType: "text",

success: function(data) {

alert(data);

}

});

点击登陆,成功连接数据库并且查询到了值(在loginManager.jsp页面有用System.out.print()打印过查询到的值)。但success里的东西不执行。用过断点,当执行完dataType后,success直接跳出,里面的alert()不执行,这是为什么呢?

改了下代码,如下:

JScript code:

$.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);

}

});

但是还是一样,没反应,只是把登陆页面刷新了!!!

针对上面只是把登录页面刷新了的问题,是a链接里有点小问题,原来我是a链接里面有href,开始,href=”",所以刷新了页面,刷新页面前进入了action,所以也获得了提交数据,但是还没来得及返回,就刷新了。改成href=”#”就ok了!正如:

还有一个原因是因为我用的是异步提交,没等验证成功的时候已经执行了按钮的提交事件,所以页面已经刷新,将其改成同步提交,按钮的提交事件必须等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)数字,布尔类型不需要 使用双引号 括起

相关文章

1a1b05c64693fbf380aa1344a7812747.png

下面小编就为大家带来一篇JavaScript学习笔记整理_关于表达式和语句。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2016-09-09

4f55910a645b073bc4fc65dc10dc14bd.png

本篇文章给大家总结了关于JS装饰器函数的相关用法以及知识点总结,对此有兴趣的朋友参考学习下。2018-04-04

0ea3c7666119d5615e582f823fb3fad6.png

这篇文章主要介绍了JavaScript中的small()方法使用详解,是JS入门学习中的基础知识,需要的朋友可以参考下2015-06-06

4f96a78db829b1556ff16de21e013c7a.png

本篇文章介绍了,基于KMP算法JavaScript的实现方法分析。需要的朋友参考下2013-05-05

8cc1031babc6aff2319f1c6af8544aa0.png

这篇文章主要介绍了JavaScript中constructor()方法的使用简介,是JS入门学习中的基础知识,需要的朋友可以参考下2015-06-06

cca732bf65a93ed2ec0ac80c638460fe.png

服务端 VBScript 与 JScript 几个相同特性的写法 By shawl.qiu...2007-03-03

2d9f31f2af7b675a3d153d2b7f1035a7.png

js判断浏览器的比较全的代码...2007-02-02

b452cee8ec5cd9e58ab98eba17281e59.png

这篇文章主要介绍了详解JavaScript中数组和字符串的lastIndexOf()方法使用,文中特别提及了IE8的兼容问题以及for in的使用问题,需要的朋友可以参考下2016-03-03

f4838ec7e2d4da28e0b57d4e852dadd4.png

浅拷贝和深拷贝都是对于JS中的引用类型而言的,浅拷贝就只是复制对象的引用,如果拷贝后的对象发生变化,原对象也会发生变化。只有深拷贝才是真正地对对象的拷贝2018-03-03

最新评论

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值