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 相关文章推荐
又一个图片自动缩小的JS代码
Mar 10 Javascript
jQuery点击弹出下拉菜单的小例子
Aug 01 Javascript
jQuery DOM操作实例
Mar 05 Javascript
js获取上传文件大小示例代码
Apr 10 Javascript
基于jQuery+PHP+Mysql实现在线拍照和在线浏览照片
Sep 06 Javascript
跟我学习javascript的prototype原型和原型链
Nov 18 Javascript
AngularJS 使用$sce控制代码安全检查
Jan 05 Javascript
el表达式 写入bootstrap表格数据页面的实例代码
Jan 11 Javascript
BootStrap 弹出层代码
Feb 09 Javascript
解决vue中使用swiper插件问题及swiper在vue中的用法
Apr 04 Javascript
vue用Object.defineProperty手写一个简单的双向绑定的示例
Jul 09 Javascript
JavaScript求一个数组中重复出现次数最多的元素及其下标位置示例
Jul 23 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计算当前坐标3公里内4个角落的最大最小经纬度实例
2016/02/26 PHP
Joomla数据库操作之JFactory::getDBO用法
2016/05/05 PHP
Laravel 加载第三方类库的方法
2018/04/20 PHP
javascript入门基础之私有变量
2010/02/23 Javascript
ExtJs之带图片的下拉列表框插件
2010/03/04 Javascript
Javscript删除数组中指定元素并返回新数组
2014/03/06 Javascript
javascript常见用法总结
2014/05/22 Javascript
简介JavaScript中Boolean.toSource()方法的使用
2015/06/05 Javascript
js实现兼容PC端和移动端滑块拖动选择数字效果
2017/02/16 Javascript
ECMAscript 变量作用域总结概括
2017/08/18 Javascript
jquery实现左右轮播切换效果
2018/01/01 jQuery
除Console.log()外更多的Javascript调试命令
2018/01/24 Javascript
对mac下nodejs 更新到最新版本的最新方法(推荐)
2018/05/17 NodeJs
深入解析ES6中的promise
2018/11/08 Javascript
bootstrap table实现合并单元格效果
2018/12/24 Javascript
在微信小程序中使用图表的方法示例
2019/04/25 Javascript
TypeScript开发Node.js程序的方法
2019/04/30 Javascript
Vue的双向数据绑定实现原理解析
2020/02/17 Javascript
Nuxt默认模板、默认布局和自定义错误页面的实现
2020/05/11 Javascript
使用Vue-cli 中为单独页面设置背景图片铺满全屏
2020/07/17 Javascript
element-ui tree结构实现增删改自定义功能代码
2020/08/31 Javascript
Vue向后台传数组数据,springboot接收vue传的数组数据实例
2020/11/12 Javascript
Python 中迭代器与生成器实例详解
2017/03/29 Python
Matplotlib使用字符串代替变量绘制散点图的方法
2020/02/17 Python
python利用文件时间批量重命名照片和视频
2021/02/09 Python
美国购买韩国护肤和美容产品网站:Althea Korea
2020/11/16 全球购物
教育专业个人求职信
2013/12/02 职场文书
四查四看整改措施
2014/09/19 职场文书
大学生个人简历自荐信
2015/03/06 职场文书
2015年转正工作总结范文
2015/04/02 职场文书
2019暑假阅读倡议书
2019/06/24 职场文书
导游词之秦始皇兵马俑博物馆
2019/09/29 职场文书
给原生html中添加水印遮罩层的实现示例
2021/04/02 Javascript
2022新作动画《福星小子》释出宣传影片 加入内田真礼&宫野真守配音演出
2022/04/08 日漫
Python实现仓库管理系统
2022/05/30 Python