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 getComputedStyle获取和设置style的原理
Oct 10 Javascript
jQuery 表单验证插件formValidation实现个性化错误提示
Jun 23 Javascript
JavaScript中SQL语句的应用实现
May 04 Javascript
jQuery ajax 路由和过滤器使用说明
Aug 02 Javascript
关于JS字符串函数String.replace()
Apr 07 Javascript
谈谈JavaScript中function多重理解
Aug 28 Javascript
基于javascript实现tab切换特效
Mar 29 Javascript
使用AJAX实现Web页面进度条的实例分享
May 06 Javascript
JS使用单链表统计英语单词出现次数
Jun 16 Javascript
JavaScript简单实现合并两个Json对象的方法示例
Oct 16 Javascript
微信小程序云开发之云函数详解
May 16 Javascript
Vue中添加滚动事件设置的方法详解
Sep 14 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
第八节 访问方式 [8]
2006/10/09 PHP
PHP删除特定数组内容并且重建数组索引的方法.
2011/03/25 PHP
有关PHP性能优化的介绍
2013/06/20 PHP
php实现以只读方式打开文件的方法
2015/03/16 PHP
php微信开发之谷歌测距
2018/06/14 PHP
IE与Firefox下javascript getyear年份的兼容性写法
2007/12/20 Javascript
jQuery.buildFragment使用方法及思路分析
2013/01/07 Javascript
sencha touch 模仿tabpanel导航栏TabBar的实例代码
2013/10/24 Javascript
AngularJS 过滤器的简单实例
2016/07/27 Javascript
JavaScript给每一个li节点绑定点击事件的实现方法
2016/12/01 Javascript
Angular多选、全选、批量选择操作实例代码
2017/03/10 Javascript
利用vue.js插入dom节点的方法
2017/03/15 Javascript
集合Bootstrap自定义confirm提示效果
2017/09/19 Javascript
CSS3结合jQuery实现动画效果及回调函数的实例
2017/12/27 jQuery
基于vue监听滚动事件实现锚点链接平滑滚动的方法
2018/01/17 Javascript
Vue组件之自定义事件的功能图解
2018/02/01 Javascript
dts文件中删除一个node或属性的操作方法
2018/08/05 Javascript
对Layer弹窗使用及返回数据接收的实例详解
2019/09/26 Javascript
Python基于回溯法解决01背包问题实例
2017/12/06 Python
对python字典过滤条件的实例详解
2019/01/22 Python
python将print输出的信息保留到日志文件中
2019/09/27 Python
python ftplib模块使用代码实例
2019/12/31 Python
keras使用Sequence类调用大规模数据集进行训练的实现
2020/06/22 Python
css3 给页面加个半圆形导航条主要利用旋转和倾斜样式
2014/02/10 HTML / CSS
用你熟悉的语言写一个连接ORACLE数据库的程序,能够完成修改和查询工作
2012/06/11 面试题
有针对性的求职自荐信
2013/11/14 职场文书
公司委托书格式范文
2014/04/04 职场文书
二年级小学生评语
2014/04/21 职场文书
班主任师德师风自我剖析材料
2014/10/02 职场文书
幼儿园五一劳动节活动总结
2015/02/09 职场文书
办公室个人总结
2015/02/28 职场文书
预备党员表决心的话
2015/09/22 职场文书
Golang之sync.Pool使用详解
2021/05/06 Golang
Python实现打乒乓小游戏
2021/09/25 Python
Java 超详细讲解ThreadLocal类的使用
2022/04/07 Java/Android
服务器间如何实现文件共享
2022/05/20 Servers