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 异步调用框架 (Part 2 - 用例设计)
Aug 03 Javascript
解决window.opener=null;window.close(),只支持IE6不支持IE7,IE8的问题
Jan 14 Javascript
jQuery实现弹出带遮罩层的居中浮动窗口效果
Sep 12 Javascript
关于js函数解释(包括内嵌,对象等)
Nov 20 Javascript
js实现开启密码大写提示
Dec 21 Javascript
ES6入门教程之Iterator与for...of循环详解
May 17 Javascript
详解基于node的前端项目编译时内存溢出问题
Aug 01 Javascript
详解使用Vue Router导航钩子与Vuex来实现后退状态保存
Sep 11 Javascript
elemetUi 组件--el-upload实现上传Excel文件的实例
Oct 27 Javascript
Vue精简版风格指南(推荐)
Jan 30 Javascript
深入探讨JavaScript的最基本部分之执行上下文
Feb 12 Javascript
Node 代理访问的实现
Sep 19 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
星际争霸兵种名称对照表
2020/03/04 星际争霸
一个php作的文本留言本的例子(五)
2006/10/09 PHP
如何删除多级目录
2006/10/09 PHP
php.ini中的php-5.2.0配置指令详解
2008/03/27 PHP
关于php mvc开发模式的感想
2011/06/28 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
PHP convert_uudecode()函数讲解
2019/02/14 PHP
Ajax,UTF-8还是GB2312 eval 还是execScript
2008/11/13 Javascript
基于jquery的让textarea自适应高度的插件
2010/08/03 Javascript
解析img图片没找到onerror事件 Stack overflow at line: 0
2013/12/23 Javascript
使用jquery.upload.js实现异步上传示例代码
2014/07/29 Javascript
javascript实现单击和双击并存的方法
2014/12/13 Javascript
好好了解一下Cookie(强烈推荐)
2016/06/14 Javascript
jQuery插件form-validation-engine正则表达式操作示例
2017/02/09 Javascript
Vue常用指令V-model用法
2017/03/08 Javascript
移动端手指放大缩小插件与js源码
2017/05/22 Javascript
vue一个页面实现音乐播放器的示例
2018/02/06 Javascript
jQuery创建及操作xml格式数据示例
2018/05/26 jQuery
微信小程序实现折叠与展开文章功能
2018/06/12 Javascript
小程序云开发如何实现图片上传及发表文字
2019/05/17 Javascript
微信小程序 SOTER 生物认证DEMO 指纹识别功能
2019/12/13 Javascript
JS实现滑动拼图验证功能完整示例
2020/03/29 Javascript
vue 实现动态路由的方法
2020/07/06 Javascript
微信小程序反编译的实现
2020/12/10 Javascript
用Python制作简单的朴素基数估计器的教程
2015/04/01 Python
python实现根据ip地址反向查找主机名称的方法
2015/04/29 Python
python查看zip包中文件及大小的方法
2015/07/09 Python
python 每天如何定时启动爬虫任务(实现方法分享)
2018/05/21 Python
Python3.7.0 Shell添加清屏快捷键的实现示例
2020/03/23 Python
Python Map 函数的使用
2020/08/28 Python
捷克母婴用品购物网站:Feedo.cz
2020/12/28 全球购物
怎样写好自荐信和推荐信
2013/12/26 职场文书
三好学生个人先进事迹材料
2014/05/17 职场文书
心理咨询专业自荐信
2014/07/07 职场文书
分析MySQL优化 index merge 后引起的死锁
2022/04/19 MySQL
本地搭建minio文件服务器(使用bat脚本启动)的方法
2022/07/15 Servers