ecshop的transport.js文件和Jquery是沖突的,兩個(gè)文件不能同時(shí)調(diào)用,現(xiàn)給出以下完美解決方案:
在transport.js文件中,大概 580行到590行之間,這個(gè)句用于格式化json,他重寫了object的結(jié)構(gòu),導(dǎo)致于js框架沖突。沖突的原因是jquery給一個(gè)object增加了很多元素,那么在Object.prototype.toJSONString = function () 這個(gè)函數(shù)中 for (k in this) 語(yǔ)句中進(jìn)行了無(wú)數(shù)次的循環(huán),導(dǎo)致網(wǎng)頁(yè)很卡,并且在IE中會(huì)報(bào)錯(cuò)。
根本的解決辦法是不用transport.js中的json功能,那么就要有一個(gè)相同的功能來(lái)代替它,這里我選用jquery-json1.3.js。首先要把transport.js中的json功能刪除。由于實(shí)現(xiàn)json功能的函數(shù)有區(qū)別,所以要麻煩改掉原ecshop中各個(gè)地方用到的toJSONString()函數(shù)。
1. 下載附件中的js附件,并替換掉原文件。(主要去掉了transport.js的json功能并新增新的json功能)
2. page_header.lbi 中添加 {insert_scripts files='jquery.js,jquery.json-1.3.js'}
3. 在所有的JS中。
替換 *.toJSONString() 為 $.toJSON(*) 替換 *.parseJSON() 為 $.evalJSON(*)
替換(不是去掉)頁(yè)面所有的$(){}函數(shù),防止jquery不生效(解釋:這一步是要替換掉原ecshop里的$(){}這個(gè)函數(shù),因?yàn)樗cjquery是沖突的,解決的辦法很多,可以用其他函數(shù)代替,比如getId(){}等等,也可以用jquery本身來(lái)解決,在此,我就不具體做例子了,由于最近比較忙,好多天沒研究ecshop了。^_^ .還有一個(gè)解決辦法,大家自行研究吧:
jQuery.noConflict()
運(yùn)行這個(gè)函數(shù)將變量$的控制權(quán)讓渡給第一個(gè)實(shí)現(xiàn)它的那個(gè)庫(kù)。
這有助于確保jQuery不會(huì)與其他庫(kù)的$對(duì)象發(fā)生沖突。
在運(yùn)行這個(gè)函數(shù)后,就只能使用jQuery變量訪問(wèn)jQuery對(duì)象。例如,在要用到$("p p")的地方,就必須換成jQuery("p p")。
注意:這個(gè)函數(shù)必須在你導(dǎo)入jQuery文件之后,并且在導(dǎo)入另一個(gè)導(dǎo)致沖突的庫(kù)之前使用。當(dāng)然也應(yīng)當(dāng)在其他沖突的庫(kù)被使用之前,除非jQuery是最后一個(gè)導(dǎo)入的。
)
注意:可能要替換掉很多地方,請(qǐng)大家不要怕麻煩
解決范例:
1.在商品瀏覽頁(yè),用戶評(píng)論這里:
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);
版權(quán)聲明: 本站資源均來(lái)自互聯(lián)網(wǎng)或會(huì)員發(fā)布,如果侵犯了您的權(quán)益請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)刪除!謝謝!
轉(zhuǎn)載請(qǐng)注明: 解決ecshop和jquery沖突方法