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
Feb 25 Javascript
Extjs4 消息框去掉关闭按钮(类似Ext.Msg.alert)
Apr 02 Javascript
jquery修改属性值实例代码(设置属性值)
Jan 06 Javascript
如何编写高质量JS代码(续)
Feb 25 Javascript
jQuery插件jquery-barcode实现条码打印的方法
Nov 25 Javascript
理解javascript闭包
Dec 15 Javascript
jQuery插件之jQuery.Form.js用法实例分析(附demo示例源码)
Jan 04 Javascript
Web制作验证码功能实例代码
Jun 19 Javascript
JS非空验证及邮箱验证的实例
Aug 11 Javascript
Koa 中的错误处理解析
Apr 09 Javascript
详解ES6新增字符串扩张方法includes()、startsWith()、endsWith()
May 12 Javascript
解决Element中el-date-picker组件不回填的情况
Nov 07 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
用php和MySql来与ODBC数据连接
2006/10/09 PHP
PHP实现域名whois查询的代码(数据源万网、新网)
2010/02/22 PHP
PHP排序算法的复习和总结
2012/02/15 PHP
探讨PHP删除文件夹的三种方法
2013/06/09 PHP
thinkphp多层MVC用法分析
2015/12/30 PHP
php 三元运算符实例详细介绍
2016/12/15 PHP
PHP连接MySQL进行增、删、改、查操作
2017/02/19 PHP
php封装的mongodb操作类代码
2017/08/06 PHP
javascript 用记忆函数快速计算递归函数
2010/03/15 Javascript
ExtJs使用IFrame的实现代码
2010/03/24 Javascript
Google的跟踪代码 动态加载js代码方法应用
2012/11/12 Javascript
Underscore.js 的模板功能介绍与应用
2012/12/24 Javascript
在Node.js应用中读写Redis数据库的简单方法
2015/06/30 Javascript
使用JavaScript制作一个简单的计数器的方法
2015/07/07 Javascript
JS实现图片预加载之无序预加载功能代码
2017/05/12 Javascript
理解Angular的providers给Http添加默认headers
2017/07/04 Javascript
常用的9个JavaScript图表库详解
2017/12/19 Javascript
vue-model实现简易计算器
2020/08/17 Javascript
JS数组转字符串实现方法解析
2020/09/04 Javascript
python用于url解码和中文解析的小脚本(python url decoder)
2013/08/11 Python
Python中list列表的一些进阶使用方法介绍
2015/08/15 Python
Python中如何使用if语句处理列表实例代码
2019/02/24 Python
Python基本数据结构之字典类型dict用法分析
2019/06/08 Python
django云端留言板实例详解
2019/07/22 Python
PyQt5使用QTimer实现电子时钟
2019/07/29 Python
Python学习笔记之Zip和Enumerate用法实例分析
2019/08/14 Python
欧舒丹比利时官网:L’OCCITANE比利时
2017/04/25 全球购物
给领导的检讨书
2014/02/16 职场文书
《鸟的天堂》教学反思
2014/02/27 职场文书
艺术教育实施方案
2014/05/03 职场文书
2014年质量管理工作总结
2014/12/01 职场文书
男方婚前保证书
2015/02/28 职场文书
计划生育目标责任书
2015/05/09 职场文书
高中体育课教学反思
2016/02/16 职场文书
Django一小时写出账号密码管理系统
2021/04/29 Python
MySQL中dd::columns表结构转table过程及应用详解
2022/09/23 MySQL