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 中增加 {insert_scripts files='jquery.js,jquery.json-1.3.js'}
3. 在一切的JS中。

替换*.toJSONString()为$.toJSON(*)
替换*.parseJSON()为$.evalJSON(*)

替换(不是去掉)页面一切的$(){}函数,避免jquery不收效(解说:这一步是要替换掉原ecshop里的$(){}这个函数,因为它与jquery是抵触的,处理的方法许多,可以用其他函数替代,比方getId(){}等等,也可以用jquery自身来处理,在此,我就不详细做比如了,因为最近比较忙,好多天没研讨ecshop了。^_^ .还有一个处理方法,我们自行研讨吧:
jQuery.noConflict()
运转这个函数将变量$的控制权让渡给第一个完成它的那个库。
这有助于保证jQuery不会与其他库的$目标发生抵触。
在运转这个函数后,就只能运用jQuery变量拜访jQuery目标。例如,在要用到$("p p")的当地,就有必要换成jQuery("p 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 里

varres=result.parseJSON();

替换为

varres=$.evalJSON(result);


声明:有的资源均来自网络转载,版权归原作者所有,如有侵犯到您的权益 请联系邮箱:123456@qq.com 我们将配合处理!

原文地址:解决ecshop和jquery冲突方法发布于2022-05-23 07:43:37

相关推荐