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 相关文章推荐
左右悬浮可分组的网站QQ在线客服代码(可谓经典)
Dec 21 Javascript
js中生成map对象的方法
Jan 09 Javascript
Javascript中For In语句用法实例
May 14 Javascript
js实现选中复选框文字变色的方法
Aug 14 Javascript
如何清除IE10+ input X 文本框的叉叉和密码输入框的眼睛图标
Dec 21 Javascript
使用jQuery的ajax方法向服务器发出get和post请求的方法
Jan 13 Javascript
Angular实现一个简单的多选复选框的弹出框指令实例
Apr 25 Javascript
zTree树形插件异步加载方法详解
Jun 14 Javascript
详解如何使用babel进行es6文件的编译
May 29 Javascript
关于Vue项目跨平台运行问题的解决方法
Sep 18 Javascript
实例讲解JavaScript截取字符串
Nov 30 Javascript
es6数组includes()用法实例分析
Apr 18 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
什么是调频(FM)、调幅(AM)、短波(SW)、长波(LW)
2021/03/01 无线电
php使用curl存储cookie的示例
2014/03/31 PHP
PHP中copy on write写时复制机制介绍
2014/05/13 PHP
PHP与MYSQL中UTF8 中文排序示例代码
2014/10/23 PHP
thinkPHP中create方法与令牌验证实例浅析
2015/12/08 PHP
PHP统计目录中文件以及目录中目录大小的方法
2016/01/09 PHP
搜索附近的人PHP实现代码
2018/02/11 PHP
jquery select操作的日期联动实现代码
2009/12/06 Javascript
Javascript 实用小技巧
2010/04/07 Javascript
jquery实现固定顶部导航效果(仿蘑菇街)
2013/03/21 Javascript
javascript静态页面传值的三种方法分享
2013/11/12 Javascript
超简单JS二级、多级联动的简单实例
2014/02/18 Javascript
javascript正则表达式中的replace方法详解
2015/04/20 Javascript
javascript中闭包(Closure)详解
2016/01/06 Javascript
ionic中列表项增加和删除的实现方法
2017/01/22 Javascript
Bootstrap table 定制提示语的加载过程
2017/02/20 Javascript
js清除浏览器缓存的几种方法
2017/03/15 Javascript
javascript深拷贝、浅拷贝和循环引用深入理解
2018/05/27 Javascript
dts文件中删除一个node或属性的操作方法
2018/08/05 Javascript
Vue组件通信的几种实现方法
2019/04/25 Javascript
vue项目中使用scss的方法步骤
2019/05/16 Javascript
详解 微信小程序开发框架(MINA)
2019/05/17 Javascript
no-vnc和node.js实现web远程桌面的完整步骤
2019/08/11 Javascript
Vue.js中的高级面试题及答案
2020/01/13 Javascript
[01:02:17]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG
2014/05/26 DOTA
[03:16]DOTA2完美大师赛主赛事首日集锦
2017/11/23 DOTA
python Selenium实现付费音乐批量下载的实现方法
2019/01/24 Python
Python Django form 组件动态从数据库取choices数据实例
2020/05/19 Python
python 自定义异常和主动抛出异常(raise)的操作
2020/12/11 Python
python如何发送带有附件、正文为HTML的邮件
2021/02/27 Python
使用CSS禁止textarea调整大小功能的方法
2015/03/13 HTML / CSS
什么是makefile? 如何编写makefile?
2013/01/02 面试题
思想政治自我鉴定
2013/10/06 职场文书
违反工作纪律检讨书
2014/02/15 职场文书
环境卫生标语
2014/06/09 职场文书
Pytorch实现图像识别之数字识别(附详细注释)
2021/05/11 Python