最近在看 jQuery 的 API 文档,在使用到 jQuery 的 ajax 时,如果指定了 dataType 为 json,老是不执行 success 回调,而是执行了 error 回调函数,极度郁闷
AJAX 即 "Asynchronous Javascript + XML"(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术。
附上代码如下:
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: 但是还是一样,没反应,只是把登陆页面刷新了!!! 针对上面只是把登录页面刷新了的问题,是 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)数字,布尔类型不需要 使用双引号 括起
来源: