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 相关文章推荐
JQuery简单实现锚点链接的平滑滚动
May 03 Javascript
jQuery+AJAX实现遮罩层登录验证界面(附源码)
Sep 13 Javascript
如何解决easyui自定义标签 datagrid edit combobox 手动输入保存不上
Dec 26 Javascript
Jquery zTree 树控件异步加载操作
Feb 25 Javascript
JavaScript中文件上传API详解
Apr 01 Javascript
Node.js的Web模板引擎ejs的入门使用教程
Jun 06 Javascript
jQuery选择器总结之常用元素查找方法
Aug 04 Javascript
Node.js中防止错误导致的进程阻塞的方法
Aug 11 Javascript
用node和express连接mysql实现登录注册的实现代码
Jul 05 Javascript
微信小程序整合使用富文本编辑器的方法详解
Apr 25 Javascript
javascript定时器的简单应用示例【控制方块移动】
Jun 17 Javascript
JavaScript中ES6规范中let和const的用法和区别
Aug 06 Javascript
在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
一个简单的自动发送邮件系统(三)
2006/10/09 PHP
PHP通用检测函数集合
2006/11/25 PHP
PHP 地址栏信息的获取代码
2009/01/07 PHP
php笔记之:有规律大文件的读取与写入的分析
2013/04/26 PHP
PHP函数实现从一个文本字符串中提取关键字的方法
2015/07/01 PHP
JavaScript版代码高亮
2006/06/26 Javascript
JQuery扩展插件Validate 3通过参数设置错误信息
2011/09/05 Javascript
node.js入门教程
2014/06/01 Javascript
node.js中的fs.fsync方法使用说明
2014/12/15 Javascript
浅谈JavaScript 执行环境、作用域及垃圾回收
2016/05/31 Javascript
深入理解ECMAScript的几个关键语句
2016/06/01 Javascript
Javascript之面向对象--方法
2016/12/02 Javascript
ES6新特性之数组、Math和扩展操作符用法示例
2017/04/01 Javascript
详解webpack进阶之插件篇
2017/07/06 Javascript
解决iview打包时UglifyJs报错的问题
2018/03/07 Javascript
[01:05]DOTA2完美大师赛趣味视频之选手教你打职业
2017/11/23 DOTA
python概率计算器实例分析
2015/03/25 Python
Linux中Python 环境软件包安装步骤
2016/03/31 Python
解决python明明pip安装成功却找不到包的问题
2019/08/28 Python
Python从文件中读取指定的行以及在文件指定位置写入
2019/09/06 Python
pygame用blit()实现动画效果的示例代码
2020/05/28 Python
python 进制转换 int、bin、oct、hex的原理
2021/01/13 Python
CSS3制作炫酷的自定义发光文字
2016/03/28 HTML / CSS
俄罗斯一家时尚女装商店:Charuel
2019/12/04 全球购物
迪卡侬波兰体育用品商店:Decathlon波兰
2020/03/31 全球购物
给校长的建议书600字
2014/05/15 职场文书
外贸会计专业自荐信
2014/06/22 职场文书
委托书格式
2014/08/01 职场文书
2015年司法所工作总结
2015/04/27 职场文书
2017大学生寒假社会实践心得体会
2016/01/14 职场文书
2019关于实习生工作安排及待遇的管理方案!
2019/07/16 职场文书
蔬果开业典礼发言稿应该怎么写?
2019/09/03 职场文书
记一次Mysql不走日期字段索引的原因小结
2021/10/24 MySQL
WCG2010 星际争霸决赛 Flash vs Goojila 1 星际经典比赛回顾
2022/04/01 星际争霸
MySQL数据库安装方法与图形化管理工具介绍
2022/05/30 MySQL
Java实现添加条码或二维码到Word文档
2022/06/01 Java/Android