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 相关文章推荐
CSS常用网站布局实例
Apr 03 Javascript
javascript call和apply方法
Nov 24 Javascript
web网页按比例显示图片实现原理及js代码
Aug 09 Javascript
JQuery与Ajax调用新浪API获取短网址的代码
Feb 07 Javascript
提取jquery的ready()方法单独使用示例
Mar 25 Javascript
理运用命名空间让js不产生冲突避免全局变量的泛滥
Jun 15 Javascript
原生javascript实现自动更新的时间日期
Feb 12 Javascript
Bootstrapvalidator校验、校验清除重置的实现代码(推荐)
Sep 28 Javascript
Javascript 详解封装from表单数据为json串进行ajax提交
Mar 29 Javascript
利用JS hash制作单页Web应用的方法详解
Oct 10 Javascript
简化vuex的状态管理方案的方法
Jun 02 Javascript
Vue3+elementui plus创建项目的方法
Dec 01 Vue.js
在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防止跨域提交表单
2013/11/01 PHP
php中cookie的使用方法
2014/03/29 PHP
Smarty模板常见的简单应用分析
2016/11/15 PHP
JavaScript-世界上误解最深的语言分析
2007/08/12 Javascript
js定义对象或数组直接量时各浏览器对多余逗号的处理(json)
2011/03/05 Javascript
jquery对dom的操作常用方法整理
2013/06/25 Javascript
jQuery中position()方法用法实例
2015/01/16 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
2015/03/26 Javascript
jQuery地图map悬停显示省市代码分享
2015/08/20 Javascript
详解maxlength属性在textarea里奇怪的表现
2015/12/27 Javascript
vuejs通过filterBy、orderBy实现搜索筛选、降序排序数据
2020/10/26 Javascript
Angular2实现自定义双向绑定属性
2017/03/22 Javascript
利用n工具轻松管理Node.js的版本
2017/04/21 Javascript
谈谈vue中mixin的一点理解
2017/12/12 Javascript
JS实现获取毫秒值及转换成年月日时分秒的方法
2018/08/15 Javascript
Vue.js 时间转换代码及时间戳转时间字符串
2018/10/16 Javascript
浅谈js闭包理解
2019/03/28 Javascript
layui 弹出层值回传解决方式
2019/11/14 Javascript
python BeautifulSoup使用方法详解
2013/11/21 Python
python 实现自动远程登陆scp文件实例代码
2017/03/13 Python
python spyder中读取txt为图片的方法
2018/04/27 Python
Django项目开发中cookies和session的常用操作分析
2018/07/03 Python
Python及Pycharm安装方法图文教程
2019/08/05 Python
python实现tail实时查看服务器日志示例
2019/12/24 Python
python suds访问webservice服务实现
2020/06/26 Python
一家专门经营包包的英国网站:MyBag
2019/09/08 全球购物
一道Delphi上机题
2012/06/04 面试题
测绘工程本科生求职信
2013/10/10 职场文书
大班开学家长寄语
2014/04/04 职场文书
商务助理求职信范文
2014/04/20 职场文书
房屋产权证明书
2015/06/19 职场文书
婚宴领导致辞
2015/07/28 职场文书
python实现求纯色彩图像的边框
2021/04/08 Python
golang 实现Location跳转方式
2021/05/02 Golang
nginx中封禁ip和允许内网ip访问的实现示例
2022/03/17 Servers
Python使用socket去实现TCP客户端和TCP服务端
2022/04/12 Python