ecshop的transport.js文件和Jquery衝突

兩個文件不能同時調用,現給出以下完美解決方案:

原因分析:
在transport.js文件中,大概 580行到590行之間,這個句用於格式化json,他重寫了object的結構,導致於js框架衝突。衝突的原因是jquery給一個object增加了很多元素,那麼在Object.prototype.toJSONString = function () 這個函數中 for (k in this) 語句中進行了無數次的循環,導致網頁很卡,並且在IE中會報錯。

解決方案:
根本的解決辦法是不用transport.js中的json功能,那麼就要有一個相同的功能來代替它,這裏我選用jquery-json1.3.js。首先要把transport.js中的json功能刪除。由於實現json功能的函數有區別,所以要麻煩改掉原ecshop中各個地方用到的toJSONString()函數。

解決步驟:
1. 下載附件中的js附件,並替換掉原文件。(主要去掉了transport.js的json功能並新增新的json功能)
2. page_header.lbi 中添加
3. 在所有的JS中。
替換 *.toJSONString() 爲 $.toJSON(*)
替換 *.parseJSON() 爲 $.evalJSON(*)
替換(不是去掉)頁面所有的$()這個函數,因爲它與jquery是衝突的,解決的辦法很多,可以用其他函數代替,比如getId(){}等等,也可以用jquery本身來解決,在此,我就不具體做例子了,由於最近比較忙,好多天沒研究ecshop了。^_^ .還有一個解決辦法,大家自行研究吧:
jQuery.noConflict()
運行這個函數將變量$的控制權讓渡給第一個實現它的那個庫。
這有助於確保jQuery不會與其他庫的$對象發生衝突。
在運行這個函數後,就只能使用jQuery變量訪問jQuery對象。例如,在要用到$("div p")的地方,就必須換成jQuery("div p")。
注意:這個函數必須在你導入jQuery文件之後,並且在導入另一個導致衝突的庫之前使用。當然也應當在其他衝突的庫被使用之前,除非jQuery是最後一個導入的。

)

注意:可能要替換掉很多地方,請大家不要怕麻煩

解決範例:
1.在商品瀏覽頁,用戶評論這裏:
Ajax.call('comment.php', 'cmt=' + cmt.toJSONString(), commentResponse, 'POST', 'JSON');
替換爲
Ajax.call('comment.php', 'cmt=' + $.toJSON(cmt), commentResponse, 'POST', 'JSON');

2.index.js 裏
var res = result.parseJSON();
替換爲
var res = $.evalJSON(result);
發佈了3 篇原創文章 · 獲贊 4 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章