ajax 请求返回200 但是不进success--2
2013-01-11 15:35
239 查看
Java代码
继上次在使用jquery的ajax操作碰到程序请求成功:
1.状态码返回200--表明服务器正常响应了客户端的请求;
2.通过firebug和IE的httpWatcher可以看出服务器端返回了正常的数据,并且是符合业务逻辑的数据。
但是,程序就是不进入到回调函数success: function(data){****}而是进入到error: function(data){***}
记得上次是因为存在跨域访问的问题导致。这次查看不存在跨域的问题。此时就很是不解。
事情的来源是这样的: 后台的配置管理模块中有一块是关于国际化的配置,增加国际化描述等等,查询国际化描述。
问题的来源是在输入key='a' 查询前十条数据时发现可以正常的展现数据,但是当我输入key值为z时,并且再查询前20条数据是发现数据不能展现,但是server返回了数据库中的数据。这时第一反应是事不时数据返回的有问题,粗略的检查了返回的数据发现和第一次查询没有什么明显的区别。但是只查询第十四条数据时发现,显示不出来。这时候就开始怀疑了数据问题,进而到数据库中查找第十四条数据没有发现什么特别的地方。
这时开始怀疑,难道是JS程序有处理数据兼容性有问题,觉得甚是不可思议。整了大约半小时,越来越觉得不大可能。就放弃了这种想法。
有转向,重新审视数据。 但是发现数据从中间换行了,没太在意。 在纠结了一会儿后问一同事,指出数据可能多了一个"回车键",在其指点下到数据库表中再次查看该条数据发现有一个字段的值多了一个"回车键"。删除后,一切恢复正常。
Java代码
[align=left][color=red] 思考第一次和第二次碰到的问题,我初步认识到:
1. 返回的数据类型一定要符合定义的数据类型。即如果你定义的 dataType 是 json 类型的,那么返回来的数据一定是 json 才可以,平且不然就会执行 error 里的程序块儿。 [color=red]
(1) 同时需要特别的注意返回的JSON数据是否是严格的JSON格式.
(2) 也应该严重关切当后台返回的是一个List 数据(List当中的数据是Json格式)时,有没脏数据即不是严格的JSON格式。
很隐蔽的可能是数据某一个字段中在开始或末尾含有特殊字符,以"回车键"、"Tab键"等
这类隐蔽错误的规避措施就是好的编程习惯:
a. 对于在页面填写入库的数据最好强制性的做,去空操作<利用客户端最好>。
b. 特殊的业务需注意特殊字符。
这样还不够,因为在开发过程中测试或开发人员自己在数据库中手动添加数据,可能会多加了空格等,导致程序调试,测试带来了麻烦。 这时就需要考虑在后台代码对获取的数据做处理。[/color][/align][/color]
2. 原因是ajax请求跨域了,解决方法是在两个文件里都添加一段 js: document.domain,或者采用Jsonp的方式,如我的前一篇blog中提到的。
Java代码
还有一点对JQuery 中Ajax的一点其它的认识: 客户端发起请求,得到服务器端的相应是200,<正确拿到服务器响应的数据>没有问题.此时在判断进入success 对应的回调函数还是进入到error对应的回调函数之前,可能会校验一些东西:
1. 返回的每条数据是否是dataType中定义的数据类型。如果有部分数据不是或者哪怕一条数据没有严格的按照dataType定义的类型,程序就会进入到error:function(){****}
2. 请求的域和当前域是否是同一域,如果不是同一域也十分有可能进入error:function(){***}
继上次在使用jquery的ajax操作碰到程序请求成功:
1.状态码返回200--表明服务器正常响应了客户端的请求;
2.通过firebug和IE的httpWatcher可以看出服务器端返回了正常的数据,并且是符合业务逻辑的数据。
但是,程序就是不进入到回调函数success: function(data){****}而是进入到error: function(data){***}
记得上次是因为存在跨域访问的问题导致。这次查看不存在跨域的问题。此时就很是不解。
事情的来源是这样的: 后台的配置管理模块中有一块是关于国际化的配置,增加国际化描述等等,查询国际化描述。
问题的来源是在输入key='a' 查询前十条数据时发现可以正常的展现数据,但是当我输入key值为z时,并且再查询前20条数据是发现数据不能展现,但是server返回了数据库中的数据。这时第一反应是事不时数据返回的有问题,粗略的检查了返回的数据发现和第一次查询没有什么明显的区别。但是只查询第十四条数据时发现,显示不出来。这时候就开始怀疑了数据问题,进而到数据库中查找第十四条数据没有发现什么特别的地方。
这时开始怀疑,难道是JS程序有处理数据兼容性有问题,觉得甚是不可思议。整了大约半小时,越来越觉得不大可能。就放弃了这种想法。
有转向,重新审视数据。 但是发现数据从中间换行了,没太在意。 在纠结了一会儿后问一同事,指出数据可能多了一个"回车键",在其指点下到数据库表中再次查看该条数据发现有一个字段的值多了一个"回车键"。删除后,一切恢复正常。
Java代码
[align=left][color=red] 思考第一次和第二次碰到的问题,我初步认识到:
1. 返回的数据类型一定要符合定义的数据类型。即如果你定义的 dataType 是 json 类型的,那么返回来的数据一定是 json 才可以,平且不然就会执行 error 里的程序块儿。 [color=red]
(1) 同时需要特别的注意返回的JSON数据是否是严格的JSON格式.
(2) 也应该严重关切当后台返回的是一个List 数据(List当中的数据是Json格式)时,有没脏数据即不是严格的JSON格式。
很隐蔽的可能是数据某一个字段中在开始或末尾含有特殊字符,以"回车键"、"Tab键"等
这类隐蔽错误的规避措施就是好的编程习惯:
a. 对于在页面填写入库的数据最好强制性的做,去空操作<利用客户端最好>。
b. 特殊的业务需注意特殊字符。
这样还不够,因为在开发过程中测试或开发人员自己在数据库中手动添加数据,可能会多加了空格等,导致程序调试,测试带来了麻烦。 这时就需要考虑在后台代码对获取的数据做处理。[/color][/align][/color]
2. 原因是ajax请求跨域了,解决方法是在两个文件里都添加一段 js: document.domain,或者采用Jsonp的方式,如我的前一篇blog中提到的。
Java代码
还有一点对JQuery 中Ajax的一点其它的认识: 客户端发起请求,得到服务器端的相应是200,<正确拿到服务器响应的数据>没有问题.此时在判断进入success 对应的回调函数还是进入到error对应的回调函数之前,可能会校验一些东西:
1. 返回的每条数据是否是dataType中定义的数据类型。如果有部分数据不是或者哪怕一条数据没有严格的按照dataType定义的类型,程序就会进入到error:function(){****}
2. 请求的域和当前域是否是同一域,如果不是同一域也十分有可能进入error:function(){***}
相关文章推荐
- ajax 请求返回200 但是不进success--2
- ajax 跨域请求返回200 但是不进success--1
- ajax跨域,使用json,crossDomain,请求返回状态200,但是走的error的原因以及解决方法
- ajax 请求回到200 但是不进success-2
- jquery的ajax请求成功OK,返回了数据,但是不进success的问题解决办法
- ajax请求失败但是返回200
- JQUERY AJAX请求成功,返回了数据,但是不进SUCCESS的问题 【转】
- 【JavaWeb】ajax请求返回200却进入error
- js - jquery ajax 请求成功,返回了数据,但是不进 success
- ajax 请求发出了,数据更改了,但是没进入success 函数 把success 换成 complete
- 关于jquery ajax请求发了,返回值也有,但是却无法进去ajax的success回调函数
- 一个方法中的ajax在success中renturn一个值,但是方法的返回值是undefind?
- ajax请求返回状态为200但还是进入error事件
- bug解决:android app内部请求接口返回500,但是浏览器返回200
- Ajax请求正常返回了数据、但是总是走error分支
- jquery ajax请求成功,返回了数据,但是不进success的问题
- spring下调用ajax进行异步检验,后台程序调试一致成功,但是返回前台就是不执行success
- JQUERY AJAX请求成功,返回了数据,但是不进SUCCESS的问题
- JQUERY AJAX请求成功,返回了数据,但是不进SUCCESS的问题
- jquery ajax请求成功,返回了数据,但是不进success的问题