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 相关文章推荐
再说AutoComplete自动补全之实现原理
Nov 05 Javascript
JQuery Tips相关(1)----关于$.Ready()
Aug 14 Javascript
详解JavaScript数组和字符串中去除重复值的方法
Mar 07 Javascript
实现一个简单的vue无限加载指令方法
Jan 10 Javascript
vue 如何添加全局函数或全局变量以及单页面的title设置总结
Jun 01 Javascript
解决Vue编译时写在style中的路径问题
Sep 21 Javascript
Vue实现购物车场景下的应用
Nov 27 Javascript
使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能
Mar 22 Javascript
Angular数据绑定机制原理
Apr 17 Javascript
JavaScript代码调试方法实例小结
Jan 05 Javascript
在Node.js下运用MQTT协议实现即时通讯及离线推送的方法
Jan 24 Javascript
微信小程序网络请求实现过程解析
Nov 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
打造计数器DIY三步曲(中)
2006/10/09 PHP
PHP实现采集程序原理和简单示例代码
2007/03/18 PHP
在PHP中使用Sockets 从Usenet中获取文件
2008/01/10 PHP
基于Zend的Config机制的应用分析
2013/05/02 PHP
PHP函数实现分页含文本分页和数字分页
2014/10/23 PHP
php实现微信发红包
2015/12/05 PHP
PHP异常类及异常处理操作实例详解
2018/12/19 PHP
JavaScript 原型链学习总结
2010/10/29 Javascript
高性能JavaScript DOM编程(1)
2015/08/11 Javascript
switch语句的妙用(必看篇)
2016/10/03 Javascript
微信小程序 Windows2008 R2服务器配置TLS1.2方法
2016/12/05 Javascript
简单实现js菜单栏切换效果
2017/03/04 Javascript
详解Webpack DLL用法以及功能
2017/07/11 Javascript
node.js操作MongoDB的实例详解
2017/10/11 Javascript
JavaScript内存泄漏的处理方式
2017/11/20 Javascript
京东优选小程序的实现代码示例
2020/02/25 Javascript
JavaScript实现简单的弹窗效果
2020/05/19 Javascript
如何手写简易的 Vue Router
2020/10/10 Javascript
Python的SQLAlchemy框架使用入门
2015/04/29 Python
Python win32com 操作Exce的l简单方法(必看)
2017/05/25 Python
Tensorflow实现酸奶销量预测分析
2019/07/19 Python
python plotly画柱状图代码实例
2019/12/13 Python
Python3 pywin32模块安装的详细步骤
2020/05/26 Python
Java ExcutorService优雅关闭方式解析
2020/05/30 Python
Python Tornado核心及相关原理详解
2020/06/24 Python
.img/.hdr格式转.nii格式的操作
2020/07/01 Python
Python collections模块的使用方法
2020/10/09 Python
CSS3支持IE6, 7, and 8的边框border属性
2012/12/28 HTML / CSS
HTML5移动端开发中的Viewport标签及相关CSS用法解析
2016/04/15 HTML / CSS
捷克汽车配件和工具销售网站:TorriaCars
2018/02/26 全球购物
在购买印度民族服饰:Soch
2020/09/15 全球购物
什么是静态路由,其特点是什么?什么是动态路由,其特点是什么?
2013/07/26 面试题
会计学自荐信
2014/06/03 职场文书
心得体会格式及范文
2016/01/25 职场文书
开学第一周日记(三篇范文)
2019/08/23 职场文书
利用 SQL Server 过滤索引提高查询语句的性能分析
2021/07/15 SQL Server