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 19 Javascript
JQuery中dataGrid设置行的高度示例代码
Jan 03 Javascript
javascript实现输出指定行数正方形图案的方法
Aug 03 Javascript
js实现获取当前时间是本月第几周的方法
Aug 11 Javascript
IE8下jQuery改变png图片透明度时出现的黑边
Aug 30 Javascript
JS树形菜单组件Bootstrap TreeView使用方法详解
Dec 21 Javascript
js实现简单的选项卡效果
Feb 23 Javascript
bootstrap-Treeview实现级联勾选
Nov 23 Javascript
微信小程序实现收藏与取消收藏切换图片功能
Aug 03 Javascript
Vue弹出菜单功能的实现代码
Sep 12 Javascript
pageGroup.js实现分页功能
Jul 27 Javascript
koa-passport实现本地验证的方法示例
Feb 20 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
PHP中数组的三种排序方法分享
2012/05/07 PHP
关于php内存不够用的快速解决方法
2013/10/26 PHP
完整删除ecshop中获取店铺信息的API
2014/12/24 PHP
php注册审核重点解析(数据访问)
2017/05/23 PHP
Nigma vs Liquid BO3 第一场2.13
2021/03/10 DOTA
JS防止用户多次提交的简单代码
2013/08/01 Javascript
JS 实现导航栏悬停效果
2013/09/23 Javascript
Nodejs+express+html5 实现拖拽上传
2014/08/08 NodeJs
Javascript模拟加速运动与减速运动代码分享
2014/12/11 Javascript
jQuery实现时尚漂亮的弹出式对话框实例
2015/08/07 Javascript
ionic隐藏tabs的方法
2016/08/29 Javascript
微信小程序开发一键登录 获取session_key和openid实例
2016/11/23 Javascript
详解Vue微信公众号开发踩坑全记录
2017/08/21 Javascript
JavaScript实现二叉树定义、遍历及查找的方法详解
2017/12/20 Javascript
vue slot 在子组件中显示父组件传递的模板
2018/03/02 Javascript
vue1.0和vue2.0的watch监听事件写法详解
2018/09/11 Javascript
jQuery 动画与停止动画效果实例详解
2020/05/19 jQuery
使用grappelli为django admin后台添加模板
2014/11/18 Python
Python中处理时间的几种方法小结
2015/04/09 Python
Python之父谈Python的未来形式
2016/07/01 Python
django一对多模型以及如何在前端实现详解
2019/07/24 Python
使用OpenCV circle函数图像上画圆的示例代码
2019/12/27 Python
使用Tensorflow实现可视化中间层和卷积层
2020/01/24 Python
pycharm 实现光标快速移动到括号外或行尾的操作
2021/02/05 Python
白俄罗斯在线大型超市:e-dostavka.by
2019/07/25 全球购物
捷科时代的软件测试笔试题
2015/11/09 面试题
商务英语专业应届毕业生求职信
2013/10/28 职场文书
公司门卫管理制度
2014/02/01 职场文书
民族团结先进个人材料
2014/02/05 职场文书
心理健康日活动总结
2014/05/08 职场文书
2014年最新领导班子整改方案
2014/09/27 职场文书
护士2014年终工作总结
2014/11/11 职场文书
高考满分作文赏析(2篇)
2019/08/12 职场文书
Spring Cloud Gateway去掉url前缀
2021/07/15 Java/Android
Mysql8.0递归查询的简单用法示例
2021/08/04 MySQL