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 26 Javascript
jQuery中:input选择器用法实例
Jan 03 Javascript
jQuery中Ajax的get、post等方法详解
Jan 20 Javascript
JavaScript常用的弹出广告及背投广告实现方法
Feb 06 Javascript
基于jQuery+Cookie实现的防止刷新的在线考试倒计时
Jun 19 Javascript
原生js实现自由拖拽弹窗代码demo
Jun 29 Javascript
JavaScript 中有关数组对象的方法(详解)
Aug 15 Javascript
jQuery实现菜单的显示和隐藏功能示例
Jul 24 jQuery
实例详解Vue项目使用eslint + prettier规范代码风格
Aug 20 Javascript
解决axios会发送两次请求,有个OPTIONS请求的问题
Oct 25 Javascript
jQuery操作动画完整实例分析
Jan 10 jQuery
Vue如何基于es6导入外部js文件
May 15 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新手上路(十三)
2006/10/09 PHP
克隆一个新项目的快捷方式
2013/04/10 PHP
Yii清理缓存的方法
2016/01/06 PHP
使用PHP连接数据库_实现用户数据的增删改查的整体操作示例
2017/09/01 PHP
ExtJS 2.0 GridPanel基本表格简明教程
2010/05/25 Javascript
js Function类型
2011/12/04 Javascript
js计算精度问题小结
2013/04/22 Javascript
开发 Internet Explorer 右键功能表(ContextMenu)
2013/07/03 Javascript
Web表单提交之disabled问题js解决方法
2015/01/13 Javascript
Node.js node-schedule定时任务隔多少分钟执行一次的方法
2015/02/10 Javascript
初识angular框架后的所思所想
2016/02/19 Javascript
JS深度拷贝Object Array实例分析
2016/03/31 Javascript
jQueryUI 拖放排序遇到滚动条时有可能无法执行排序的小bug及解决方案
2016/12/19 Javascript
基于node.js依赖express解析post请求四种数据格式
2017/02/13 Javascript
AngularJS 购物车全选/取消全选功能的实现方法
2017/08/14 Javascript
利用纯JS实现像素逐渐显示的方法示例
2017/08/14 Javascript
javascript、php关键字搜索函数的使用方法
2018/05/29 Javascript
jQuery实现的鼠标拖动浮层功能示例【拖动div等任何标签】
2018/12/29 jQuery
vscode 配置vue+vetur+eslint+prettier自动格式化功能
2020/03/23 Javascript
Javascript文本框脚本实现方法解析
2020/10/30 Javascript
python三元运算符实现方法
2013/12/17 Python
Python合并字符串的3种方法
2015/05/21 Python
Pthon批量处理将pdb文件生成dssp文件
2015/06/21 Python
pandas 快速处理 date_time 日期格式方法
2018/11/12 Python
解决tensorflow训练时内存持续增加并占满的问题
2020/01/19 Python
python中sort sorted reverse reversed函数的区别说明
2020/05/11 Python
Qoo10马来西亚:全球时尚和引领潮流的购物市场
2016/08/25 全球购物
美国亚马逊旗下男装网站:East Dane(支持中文)
2019/09/25 全球购物
正宗的澳大利亚Ugg靴子零售商:UGG Express
2020/04/19 全球购物
女大学生自我鉴定
2013/12/09 职场文书
购房协议书
2014/04/11 职场文书
解除劳动合同协议书
2014/04/14 职场文书
最美乡村医生事迹材料
2014/06/02 职场文书
倡议书格式
2014/08/30 职场文书
公司承诺书格式范文
2015/04/28 职场文书
中学教代会开幕词
2016/03/04 职场文书