jQuery1.4.2与老版本json格式兼容的解决方法


Posted in Javascript onFebruary 12, 2011

原json文件内容为:
{
label: 'Europe (EU27)',
data: [[1999, 3.0], [2000, 3.9], [2001, 2.0], [2002, 1.2], [2003, 1.3], [2004, 2.5], [2005, 2.0], [2006, 3.1], [2007, 2.9], [2008, 0.9]]
}
解决方法一:
改成标准的json格式,要求对字符串都使用""限定,修改后的内容为:
{
"label": "Europe (EU27)",
"data": [[1999, 3.0], [2000, 3.9], [2001, 2.0], [2002, 1.2], [2003, 1.3], [2004, 2.5], [2005, 2.0], [2006, 3.1], [2007, 2.9], [2008, 0.9]]
}
这样就可以正常加载了。
解决方法二:
在jQuery-1.4.2.js中找到"parseJSON: function",可发现有如下代码:

// Logic borrowed from http://json.org/json2.js 
if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@") 
.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]") 
.replace(/(?:^|:|,)(?:\s*\[)+/g, "")) ) { 
// Try to use the native JSON parser first 
return window.JSON && window.JSON.parse ? 
window.JSON.parse( data ) : 
(new Function("return " + data))(); 
} else { 
jQuery.error( "Invalid JSON: " + data ); 
}

在httpData: function中用到了parseJSON函数:
// Get the JavaScript object, if JSON is used. 
if ( type === "json" || !type && ct.indexOf("json") >= 0 ) { 
data = jQuery.parseJSON( data );

在jQuery1.3.2中,没有parseJSON这个方法,而是直接使用下面的代码。
// Get the JavaScript object, if JSON is used. 
if ( type == "json" ) 
data = window["eval"]("(" + data + ")");

替换成原来1.3.2的代码就可以了。
下面是其它网友的一些补充:
jquery1.4.2版本在性能上又提升了一倍,但有一个令人头痛的事就是$.getJSON函数,原先使用旧版本的JSON数据如果写得不标准,使用这个版本就无法正常获取JSON数据了
例如:
JSON不标准的写法
{Err:1,errmsg:'无效ID值!请从正确表单页提交!'}

jquery1.4.x以下旧版本是能正常获取的,如果你的程序开发时用的是这类格式,那就头痛了,因为如果升级JQUERY到新版本,这种格式是读取不了的
JSON标准的写法,各种版本都能正常获取
{"Err":1,"errmsg":"无效ID值!请从正确表单页提交!"}

这是因为jquery1.4.X版本里使用了native json parser,对json格式有严格的要求
如果你不想修改程序的JSON数据,还有什么方法能让旧新据适合用在新版本上呢?
方法是有的,只要恢复回旧版本的JSON处理函数就可以了,修改方法如下:
jq1.4.x Regular 版本修改
打开jquery-1.4.x.js文件,找到下面代码:
data = jQuery.parseJSON( data );
修改为以下代码:
data = window["eval"]("(" + data + ")");
jq1.4.x Minified 版本修改
打开jquery-1.4.x.min.js文件,找到下面代码:
a=c.parseJSON(a);
修改为以下代码:
a= window["eval"]("(" + a+ ")");
试试你的程序吧,呵呵,$.getJSON是不是正常了?
当然,如果你有能力写正则的话,可以修改新版本的parseJSON函数里JSON处理正则
Javascript 相关文章推荐
在JavaScript中实现命名空间
Nov 23 Javascript
javascript 获取函数形参个数
Jul 31 Javascript
js+html5绘制图片到canvas的方法
Jun 05 Javascript
JavaScript获取并更改input标签name属性的方法
Jul 02 Javascript
JS实用技巧小结(屏蔽错误、div滚动条设置、背景图片位置等)
Jun 16 Javascript
关于javascript中限定时间内防止按钮重复点击的思路详解
Aug 16 Javascript
js实现加载更多功能实例
Oct 27 Javascript
原生JS轮播图插件
Feb 09 Javascript
Vue开发中整合axios的文件整理
Apr 29 Javascript
vue2.0 自定义日期时间过滤器
Jun 07 Javascript
js精确的加减乘除实例
Nov 14 Javascript
vue实现表格合并功能
Dec 01 Vue.js
在vs2010中调试javascript代码方法
Feb 11 #Javascript
juqery 学习之六 CSS--css、位置、宽高
Feb 11 #Javascript
juqery 学习之五 文档处理 包裹、替换、删除、复制
Feb 11 #Javascript
juqery 学习之五 文档处理 插入
Feb 11 #Javascript
基于JQuery的浮动DIV显示提示信息并自动隐藏
Feb 11 #Javascript
Javascript面向对象之四 继承
Feb 08 #Javascript
javascript面向对象之二 命名空间
Feb 08 #Javascript
You might like
php调用Google translate_tts api实现代码
2013/08/07 PHP
Yii使用CLinkPager分页实例详解
2014/07/23 PHP
php关键字仅替换一次的实现函数
2015/10/29 PHP
php和C#的yield迭代器实现方法对比分析
2019/07/17 PHP
PHP实现笛卡尔积算法的实例讲解
2019/12/22 PHP
键盘控制事件应用教程大全
2006/11/24 Javascript
jQuery autocomplete插件修改
2009/04/17 Javascript
js 复制或插入Html的实现方法小结
2010/05/19 Javascript
js实现快速分享功能(你的文章分享工具)
2013/06/25 Javascript
jquery中使用循环下拉菜单示例代码
2014/09/24 Javascript
浅谈jquery设置和获得checkbox选中的问题
2016/08/19 Javascript
简单易懂的天气插件(代码分享)
2017/02/04 Javascript
node.js 抓取代理ip实例代码
2017/04/30 Javascript
ExtJs的Ext.Ajax.request实现waitMsg等待提示效果
2017/06/14 Javascript
NodeJS 实现手机短信验证模块阿里大于功能
2017/06/19 NodeJs
JS+canvas实现的五子棋游戏【人机大战版】
2017/07/19 Javascript
浅谈AngularJS中$http服务的简单用法
2018/05/15 Javascript
jQuery实现获取当前鼠标位置并输出功能示例
2019/01/05 jQuery
小程序scroll-view安卓机隐藏横向滚动条的实现详解
2019/05/16 Javascript
Vue+Element-UI实现上传图片并压缩
2019/11/26 Javascript
详解Vue中的MVVM原理和实现方法
2020/07/15 Javascript
Node.js文本文件BOM头的去除方法
2020/11/22 Javascript
[05:26]2014DOTA2西雅图国际邀请赛 iG战队巡礼
2014/07/07 DOTA
[01:57]2016完美“圣”典风云人物:国士无双专访
2016/12/04 DOTA
Python基础之函数用法实例详解
2014/09/10 Python
Python如何实现守护进程的方法示例
2017/02/08 Python
python实现图像识别功能
2018/01/29 Python
Python DataFrame设置/更改列表字段/元素类型的方法
2018/06/09 Python
Win10系统下安装labelme及json文件批量转化方法
2019/07/30 Python
Python classmethod装饰器原理及用法解析
2020/10/17 Python
Monnier Frères美国官网:法国知名奢侈品网站
2016/11/22 全球购物
Delphi工程师笔试题
2013/09/21 面试题
辞职信如何写
2015/02/27 职场文书
2015年中职班主任工作总结
2015/05/25 职场文书
祝福语集锦:朋友新店开业祝福语
2019/12/10 职场文书
Python中使用ipython的详细教程
2021/06/22 Python