jQuery1.4.2與老版本json格式兼容的解決方法
更新時間:2011年02月12日 16:34:20 作者:
原來使用jQuery1.3.2編寫的代碼,更換到1.4.2后,使用jQuery.ajax()加載的json文件,不能正常加載。(使用jQuery.getJSON()也一樣)
原json文件內(nèi)容為:
{
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]]
}
解決方法一:
改成標(biāo)準(zhǔn)的json格式,要求對字符串都使用""限定,修改后的內(nèi)容為:
{
"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",可發(fā)現(xiàn)有如下代碼:
// 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函數(shù):
// 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的代碼就可以了。
下面是其它網(wǎng)友的一些補(bǔ)充:
jquery1.4.2版本在性能上又提升了一倍,但有一個令人頭痛的事就是$.getJSON函數(shù),原先使用舊版本的JSON數(shù)據(jù)如果寫得不標(biāo)準(zhǔn),使用這個版本就無法正常獲取JSON數(shù)據(jù)了
例如:
JSON不標(biāo)準(zhǔn)的寫法
{Err:1,errmsg:'無效ID值!請從正確表單頁提交!'}
jquery1.4.x以下舊版本是能正常獲取的,如果你的程序開發(fā)時用的是這類格式,那就頭痛了,因?yàn)槿绻塉QUERY到新版本,這種格式是讀取不了的
JSON標(biāo)準(zhǔn)的寫法,各種版本都能正常獲取
{"Err":1,"errmsg":"無效ID值!請從正確表單頁提交!"}
這是因?yàn)閖query1.4.X版本里使用了native json parser,對json格式有嚴(yán)格的要求
如果你不想修改程序的JSON數(shù)據(jù),還有什么方法能讓舊新?lián)m合用在新版本上呢?
方法是有的,只要恢復(fù)回舊版本的JSON處理函數(shù)就可以了,修改方法如下:
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是不是正常了?
當(dāng)然,如果你有能力寫正則的話,可以修改新版本的parseJSON函數(shù)里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]]
}
解決方法一:
改成標(biāo)準(zhǔn)的json格式,要求對字符串都使用""限定,修改后的內(nèi)容為:
{
"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",可發(fā)現(xiàn)有如下代碼:
復(fù)制代碼 代碼如下:
// 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函數(shù):
復(fù)制代碼 代碼如下:
// Get the JavaScript object, if JSON is used.
if ( type === "json" || !type && ct.indexOf("json") >= 0 ) {
data = jQuery.parseJSON( data );
在jQuery1.3.2中,沒有parseJSON這個方法,而是直接使用下面的代碼。
復(fù)制代碼 代碼如下:
// Get the JavaScript object, if JSON is used.
if ( type == "json" )
data = window["eval"]("(" + data + ")");
替換成原來1.3.2的代碼就可以了。
下面是其它網(wǎng)友的一些補(bǔ)充:
jquery1.4.2版本在性能上又提升了一倍,但有一個令人頭痛的事就是$.getJSON函數(shù),原先使用舊版本的JSON數(shù)據(jù)如果寫得不標(biāo)準(zhǔn),使用這個版本就無法正常獲取JSON數(shù)據(jù)了
例如:
JSON不標(biāo)準(zhǔn)的寫法
復(fù)制代碼 代碼如下:
{Err:1,errmsg:'無效ID值!請從正確表單頁提交!'}
jquery1.4.x以下舊版本是能正常獲取的,如果你的程序開發(fā)時用的是這類格式,那就頭痛了,因?yàn)槿绻塉QUERY到新版本,這種格式是讀取不了的
JSON標(biāo)準(zhǔn)的寫法,各種版本都能正常獲取
復(fù)制代碼 代碼如下:
{"Err":1,"errmsg":"無效ID值!請從正確表單頁提交!"}
這是因?yàn)閖query1.4.X版本里使用了native json parser,對json格式有嚴(yán)格的要求
如果你不想修改程序的JSON數(shù)據(jù),還有什么方法能讓舊新?lián)m合用在新版本上呢?
方法是有的,只要恢復(fù)回舊版本的JSON處理函數(shù)就可以了,修改方法如下:
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是不是正常了?
當(dāng)然,如果你有能力寫正則的話,可以修改新版本的parseJSON函數(shù)里JSON處理正則
相關(guān)文章
jQuery Easyui Datagrid實(shí)現(xiàn)單行的上移下移及保存移動的結(jié)果
這篇文章主要介紹了jQuery Easyui Datagrid實(shí)現(xiàn)單行的上移下移及保存移動的結(jié)果,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-08-08jQuery實(shí)現(xiàn)的網(wǎng)頁豎向菜單效果代碼
這篇文章主要介紹了jQuery實(shí)現(xiàn)的網(wǎng)頁豎向菜單效果代碼,涉及jquery控制頁面元素簡單折疊與展開功能,非常簡單實(shí)用,需要的朋友可以參考下2015-08-08webpack中引用jquery的簡單實(shí)現(xiàn)
下面小編就為大家?guī)硪黄獁ebpack中引用jquery的簡單實(shí)現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-06-06Jquery多選下拉列表插件jquery multiselect功能介紹及使用
支持點(diǎn)擊label實(shí)現(xiàn)checkbox組選擇,頭部選項(xiàng),如全選/ 取消全選 /關(guān)閉功能,支持鍵盤選擇等等,下面與大家分享下具體使用2013-05-05jQuery實(shí)現(xiàn)倒計時(倒計時年月日可自己輸入)
本篇文章主要對jQuery實(shí)現(xiàn)倒計時進(jìn)行了實(shí)例分析。并附上實(shí)例源碼,有興趣的朋友可以下載源碼調(diào)試運(yùn)行試試看,希望對大家有所幫助2016-12-12jQuery實(shí)現(xiàn)手機(jī)號正則驗(yàn)證輸入及自動填充空格功能
這篇文章主要介紹了jQuery實(shí)現(xiàn)手機(jī)號正則驗(yàn)證輸入及自動填充空格功能,涉及jQuery事件響應(yīng)、字符串遍歷及正則判斷等相關(guān)操作技巧,需要的朋友可以參考下2018-01-01jquery 圓角遮罩圖片實(shí)現(xiàn)圖片圓角
用jquery實(shí)現(xiàn)的圖片圓角效果代碼。2009-05-05