Posted on 2016-01-06 20:07 金-Fish 阅读(11596) 评论(1) 编辑 收藏html
这几天一直被 ajax请求成功,返回了数据,可是不进success的问题困扰着,怎么弄就是解决不了,总觉得 是:$(document).ready(function(){});没起做用,一直找页面加载的方法来试,整了好几天没整出来....今天比较幸运, 在网上找到了一篇关于这方面问题的文章,按上面的方法一试,果真ok了,哈哈哈,真是过高兴了....终于解决这个问题了。ajax
这个问题的缘由(来自http://www.myexception.cn/ajax/413061.html的拷贝内容):数据库
--------------------------拷贝内容 start ----------------------------------------------------编程
“ 1.状态码返回200--代表服务器正常响应了客户端的请求;
2.经过firebug和IE的httpWatcher能够看出服务器端返回了正常的数据,而且是符合业务逻辑的数据。
可是,程序就是不进入到回调函数success: function(data){****}而是进入到error: function(data){***}
记得上次是由于存在跨域访问的问题致使。此次查看不存在跨域的问题。此时就非常不解。
事情的来源是这样的: 后台的配置管理模块中有一块是关于国际化的配置,增长国际化描述等等,查询国际化描述。
问题的来源是在输入key='a' 查询前十条数据时发现能够正常的展示数据,可是当我输入key值为z时,而且再查询前20条数据是发现数据不能展示,可是server返回了数据库中的数 据。这时第一反应是事不时数据返回的有问题,粗略的检查了返回的数据发现和第一次查询没有什么明显的区别。可是只查询第十四条数据时发现,显示不出来。这 时候就开始怀疑了数据问题,进而到数据库中查找第十四条数据没有发现什么特别的地方。
这时开始怀疑,难道是JS程序有处理数据兼容性有问题,以为甚是难以想象。整了大约半小时,愈来愈以为不大可能。就放弃了这种想法。
有转向,从新审视数据。 可是发现数据从中间换行了,没太在乎。 在纠结了一下子后问一同事,指出数据可能多了一个"回车键",在其指点下到数据库表中再次查看该条数据发现有一个字段的值多了一个"回车键"。删除后,一切恢复正常。
思考第一次和第二次碰到的问题,我初步认识到:
1. 返回的数据类型必定要符合定义的数据类型。即若是你定义的 dataType 是 json 类型的,那么返回来的数据必定是 json 才能够,平且否则就会执行 error 里的程序块儿。
(1) 同时须要特别的注意返回的JSON数据是不是严格的JSON格式.
(2) 也应该严重关切当后台返回的是一个List 数据(List当中的数据是Json格式)时,有没脏数据即不是严格的JSON格式。
很隐蔽的多是数据某一个字段中在开始或末尾含有特殊字符,以"回车键"、"Tab键"等
这类隐蔽错误的规避措施就是好的编程习惯:
a. 对于在页面填写入库的数据最好强制性的作,去空操做<利用客户端最好>。
b. 特殊的业务需注意特殊字符。
这样还不够,由于在开发过程当中测试或开发人员本身在数据库中手动添加数据,可能会多加了空格等,致使程序调试,测试带来了麻烦。 这时就须要考虑在后台代码对获取的数据作处理。
2. 缘由是ajax请求跨域了,解决方法是在两个文件里都添加一段 js: [/b]document.domain,或者采用Jsonp的方式,如个人前一篇blog中提到的。
还有一点对JQuery 中Ajax的一点其它的认识: 客户端发起请求,获得服务器端的相应是200,<正确拿到服务器响应的数据>没有问题.此时在判断进入success 对应的回调函数仍是进入到error对应的回调函数以前,可能会校验一些东西:
1. 返回的每条数据是不是dataType中定义的数据类型。若是有部分数据不是或者哪怕一条数据没有严格的按照dataType定义的类型,程序就会进入到error:function(){****}
2. 请求的域和当前域是不是同一域,若是不是同一域也十分有可能进入error:function(){***} ” json
---------------------------end --------------------------------------------------------------------------跨域
经过看了这段内容后,我再对照个人ajax 看了一遍,发现我少配了一个属性(dataType属性)由于我数据类型返回的是json类型,而我这边没有配dataType:'json',这一属 性,因此致使出现了此问题。不过, 困扰我这么久的问题终于解决了,下次得万分当心才是,该配置的东西仍是得配置,不能偷懒。服务器