《走过的路 踩过的坑》--jQuery ajax dataType返回出错问题及解决
来源:互联网 发布:淘宝男士内衣薄款莱卡 编辑:程序博客网 时间:2024/06/04 19:25
1需求
目前在维护一个项目。接到一个需求是要在某个保存动作之前增加一步校验,如果校验通过则可以进行保存,否则返回错误提示并阻止保存动作。
因为是寄存项目,保存动作是通过js提交表单发送请求动作,所以在不改变其业务逻辑的前提下,我选择了在保存之前使用jQuery ajax增加一个校验方法。success回调处从后端拿到一个JSON格式的响应,包含一个布尔类型的flag。
demo如下:
function chkXXX(name){var result;$.ajax({type:"post",url:"chkXXX.do",dataType:"json",data: $("#add_form").serialize(),async:false,success:function(backdata){var r = jQuery.parseJSON(backdata);result = r;},error:function(xhr, status, e){alert(status);}});return result;}
2问题
在三下五除二快速搞定上线后,隔天运维MM就接到反馈,告知此功能并没有work。。。(我靠,不可能吧。写过辣么多类似的校验,怎么就你罢工了呢)
开始以为是浏览器兼容性问题,因为遇到好多此种情况(比如有些情况在 win7 ie8可以,但在xp ie8 就不行),但是我在使用ie,chrome调试以后发现都不正常,
这个时候开启chrome的F12,报错信息提示 返回的flag 为null,但是我后端明明只返回true,false两种情况,这个时候基本确定问题就出在前端了。
断点debug,跟踪到的resut 确实是null,非后台JSON。看来问题就定位到:
var r = jQuery.parseJSON(backdata);
3原因
其实问题的根本原因还是在于自己对ajax原理的不熟悉。
这里我忽略一个细节,就是我在设置请求属性的时候,设置了:
dataType:"json",
var r = jQuery.parseJSON(backdata);冲突了。
预期服务器返回的数据类型。
如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断,比如 XML MIME 类型就被识别为 XML。在 1.4 中,JSON 就会生成一个 JavaScript 对象,而 script 则会执行这个脚本。随后服务器端返回的数据会根据这个值解析后,传递给回调函数。可用值:
"xml": 返回 XML 文档,可用 jQuery 处理。
"html": 返回纯文本 HTML 信息;包含的 script 标签会在插入 dom 时执行。
"script": 返回纯文本 JavaScript 代码。不会自动缓存结果。除非设置了 "cache" 参数。注意:在远程请求时(不在同一个域下),所有 POST 请求都将转为 GET 请求。(因为将使用 DOM 的 script标签来加载)
"json": 返回 JSON 数据 。
"jsonp": JSONP 格式。使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。
"text": 返回纯文本字符串
设置dataType以后,返回的数据类型就已经是JSON对象了,再使用jq转换就出错了。
4解决
既然知道原因了,就知道解决方案了
其一就是设置dataType属性后,直接返回backdata;
其二则是不设施dataType,返回JSON格式的字符串,然后手动转换成JSON对象;
5总结
走过的路,踩过的坑。以后还需努力啊!
- 《走过的路 踩过的坑》--jQuery ajax dataType返回出错问题及解决
- jQuery ajax 的datatype
- AJAX的dataType问题
- jQuery ajax的dataType参数的作用
- jquery中ajax的dataType属性
- Jquery ajax请求中datatype的含义
- 【Ajax】ajax的dataType
- jquery 的 ajax的dataType,服务器返回了数据,但是succes:function(data)不执行
- jQuery的Ajax中dataType选项用于设置返回值类型
- jquery的ajax中dataType="json",返回值判断是否为空,是否为null
- 关于ajax的dataType类型为text返回值乱码的问题
- 解决ajax返回的问题。
- jQuery dataType指定为json的问题
- jQuery dataType指定为json的问题
- JQuery & Django Ajax 踩过的坑
- jquery中ajax方法的datatype的作用
- jquery中ajax的dataType属性包括哪几项
- jquery Ajax 无返回的问题
- hdoj 2612 <双点bfs就最小相交时间>
- C++中extern关键字详解
- TCP的流量控制
- 分辨率与超分辨率图像重建
- 分享一个Spring MVC 根据图片URL,下载图片的方法
- 《走过的路 踩过的坑》--jQuery ajax dataType返回出错问题及解决
- cocos-js android按键监听
- 安卓Jsoup解析的一个小Demo
- HDU3466
- .net 生成缩略图
- 关于BI(3)
- git 与github 之前的传输通道建立
- MySQL进阶(四)——函数
- UVA 11624 Fire!(bfs)