服务电话:136 2446 7185 于先生
常见问题 付款方式 加入收藏
首页 公司简介 业务介绍 风格模板 资讯中心 案例展示 项目拓展 联系我们
长春地区网站建设,做各类网站 咨询电话:136 2446 7185
资讯中心 更多>>
微信朋友圈与公众号营销的100
那么用户体验的开始可以从哪些方
围绕关键词优化规划整理出需要做
如何申请谷歌google网站广
红松林 生态视频阅读第一品牌
2018年春节期间移动数据流量
从四大方面解说微信朋友圈营销并
服务方案 更多>>
年年丰收,吉林省年年丰收农业发
吉林经济网是吉林省地区权威专业
吉林省书画院是吉林省专业书画创
吉林省长春微信三级分销系统功能
美国卡夫盾石油化工有限公司
合肥安嘉生物科技有限公司
福尔安全顾问公司 吉林省调查公
联系方式 更多>>
地址:长春市亚泰大街与自由大路交汇五环国际大厦1408、1409室
联系人:于先生
全国咨询热线:400-915-4435
邮箱:xgnic@xgnic.com
手机:13624467185 13844844006
网址:http://www.xgsite.com
 
资讯中心 >> 解决ECShop transport.js与jQuery冲突

解决ECShop transport.js与jQuery冲突

点击率:1218   发布人:管理员    发布日期:2014/6/3 16:51:32   【去百度看看】
jQuery是目前在JavaScript领域上最广泛流行的框架,无奈这次把他加到 ECShop的时候就遇到一个十分头疼的问题。

ECShop把AJAX事件和JSON解析的模块放在common/transport.js之中,可以说它也有自己封装的一套工具,这其实是很正常的。

但恰恰的,在封装JSON各种方法的同时对object的模型进行了重写,这个就跟jQuery冲突了。因为众所周知的,jQuery对各种JavaScript对象进行了扩展。

这一切其实都很容易理解,各有各的理由十分自然,但头痛和无奈的就变得在我们这些使用者身上了。在ECShop论坛上原来也有很多朋友提出了这个问题,也提出了各种各样的方法,我尝试了一些,不好或者甚至无用,所以只好自己动手了。

解决思路:

一切起因就是在于两者都重写了Object,所以当然任意一方让步就可以了。在这里我选择了修改代码量比较少的transport.js,除了简单,更重要的是去修改jQuery的话框架提供的强大特效和各种敏捷方法就失效了,还不是得不偿失。

1、加入JSON2.js文件
原因很简单,transport修改Object是为了加入支持JSON的方法。所以我这里用JSON官网在javascript语言上提供的json2.js支持具体下载地址 http://www.json.org/json2.js

2、修改transport.js

2.1 注释掉重写object的方法,具体搜索

Js代码 01.if ( ! Object.prototype.toJSONString) {
[js] view plaincopyprint?
01.if ( ! Object.prototype.toJSONString) {
if ( ! Object.prototype.toJSONString) {
这一段代码,然后把里面的内容全部注释掉。(参考:注释掉496-737行)

2.2 加入新的JSON支持方法

Js代码 01.function objToJSONString(obj, filter){
02. return JSON.stringify(obj, filter);
03.}
04.
05.function parseObjectToJSON(object, filter){
06. return JSON.parse(object, filter);
07.}
[js] view plaincopyprint?
01.function objToJSONString(obj, filter){
02. return JSON.stringify(obj, filter);
03.}
04.
05.function parseObjectToJSON(object, filter){
06. return JSON.parse(object, filter);
07.}
function objToJSONString(obj, filter){
return JSON.stringify(obj, filter);
}

function parseObjectToJSON(object, filter){
return JSON.parse(object, filter);
}

也可以看到其实都很简单,都是调用json2.js里面提供的方法,有人觉得不必在这里添加直接调用也可以,但我还是建议做这样的一个适配器在这,因为容易容易表明用意。

2.3 修正AJAX方法

2.3.1 在transport.js搜索params.toJSONString() 改为调用 objToJSONString方法(具体在352行左右)

2.3.2 继续在transport.js搜索result.parseJSON() 改为调用 parseObjectToJSON发那个发(具体在408行左右)

3、修复旧JSON调用地方

简单来说就是把所有toJSONString 的调用改为用objToJSONString,而parseJSON()改为parseObjectToJSON。

但非不得已不建议把一切旧的调用都修复,应该选择性的修复,应当出现冲突的地方我们才必须去修复。

就是说哪里调用了jQuery,就把修正后的transport.js及json2.js导入,并且修复toJSONString和parseJSON方法,其他页面就不必了。

所以说,也不建议在header里面就加入了jQuery,因为这样每个页面都会出现冲突了,修复工资也比较麻烦了,能避免尽量避免了。

最好的解决方案就坐等ECShop来搞定了。

同样的,这次的冲突不具备特殊性,也是一次很好的经验,因为以后遇到修改object等对象的场合并不会少,有这次的经验就知道如何应对了。

PS:附件为修复后的transport.js文件,注意调用之前必须加入json2.js文件。
打印本页  关闭本页
构站网 免费网站建设 长春网站建设团队 长春网站制作业务介绍 长春网站设计 长春网站建设公司 长春网站建设流程

版权所有 吉林省新格信息技术有限公司 【安徽省新格通达电子商务有限公司】 地址1:长春市南关区体育场五环国际大厦1408室  地址2:合肥市滨湖新区云谷路与江西路交口未来领地A座1011室

皖ICP备2021004516号-1 邮箱:web@4435.cn 手机: 136 2446 7185  13844844006


吉公网安备 22010202000117号