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 提交和设置表单的值
Dec 19 Javascript
jQuery使用动态渲染表单功能完成ajax文件下载
Jan 15 Javascript
AngularJS语法详解(续)
Jan 23 Javascript
js计算德州扑克牌面值的方法
Mar 04 Javascript
微信js-sdk分享功能接口常用逻辑封装示例
Oct 13 Javascript
通过BootStrap-select插件 js jQuery控制select属性变化
Jan 03 Javascript
JavaScript常用正则函数用法示例
Jan 23 Javascript
浅谈对Angular中的生命周期钩子的理解
Jul 31 Javascript
vue axios 二次封装的示例代码
Dec 08 Javascript
基于 Vue.js 2.0 酷炫自适应背景视频登录页面实现方式
Jan 17 Javascript
vue.js配合$.post从后台获取数据简单demo分享
Aug 11 Javascript
js刷新页面location.reload()用法详解
Dec 09 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查找任何页面上的所有链接的方法
2013/12/03 PHP
PHP中定义数组常量(array常量)的方法
2014/11/17 PHP
php 5.6版本中编写一个PHP扩展的简单示例
2015/01/20 PHP
Yii2使用$this->context获取当前的Module、Controller(控制器)、Action等
2017/03/29 PHP
java解析json方法总结
2019/05/16 PHP
Javascript注入技巧
2007/06/22 Javascript
为指定的元素添加遮罩层的示例代码
2014/01/15 Javascript
js处理自己不能定义二维数组的方法详解
2014/03/03 Javascript
Javascript 构造函数详解
2014/10/22 Javascript
浅谈JavaScript的事件
2015/02/27 Javascript
javascript实时显示北京时间的方法
2015/03/12 Javascript
JS+CSS实现美化的下拉列表框效果
2015/08/11 Javascript
Webpack 实现 Node.js 代码热替换
2015/10/22 Javascript
Javascript模仿淘宝信用评价实例(附源码)
2015/11/26 Javascript
老生常谈JavaScript中的this关键字
2016/10/01 Javascript
Angular2表单自定义验证器的实现
2016/10/19 Javascript
canvas学习之API整理笔记(一)
2016/12/29 Javascript
jquery 键盘事件的使用方法详解
2017/09/13 jQuery
Three.js实现简单3D房间布局
2018/12/30 Javascript
IntelliJ IDEA编辑器配置vue高亮显示
2019/09/26 Javascript
vue-video-player视频播放器使用配置详解
2020/10/23 Javascript
Python实现的服务器示例小结【单进程、多进程、多线程、非阻塞式】
2019/05/23 Python
详解用python计算阶乘的几种方法
2019/08/14 Python
Python递归求出列表(包括列表中的子列表)的最大值实例
2020/02/27 Python
Django Admin后台添加数据库视图过程解析
2020/04/01 Python
python3检查字典传入函数键是否齐全的实例
2020/06/05 Python
用Python制作音乐海报
2021/01/26 Python
详解Html5原生拖拽操作
2018/01/12 HTML / CSS
80年代复古T恤:TruffleShuffle
2018/07/02 全球购物
成品仓管员工作职责
2013/12/29 职场文书
行政专员岗位职责
2014/01/02 职场文书
精彩的英文自荐信
2014/01/30 职场文书
大学军训心得体会800字
2016/01/11 职场文书
扩展多台相同的Web服务器
2021/04/01 Servers
《雀魂PONG☆》4月1日播出 PV角色设定情报
2022/03/20 日漫
分享很少见很有用的SQL功能CORRESPONDING
2022/08/05 MySQL