解决ECShop transport.js和jQuery冲突(转载并做了升级).docVIP

解决ECShop transport.js和jQuery冲突(转载并做了升级).doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
解决ECShop transport.js和jQuery冲突(转载并做了升级)

解决ECShop transport.js和jQuery冲突(转载并做了升级) 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支持具体下载地址 /json2.js 2、修改transport.js 2.1 注释掉重写object的方法,具体搜索 Js代码 if ( ! Ototype.toJSONString) { if ( ! Ototype.toJSONString) { 这一段代码,然后把里面的内容全部注释掉。(参考:注释掉496-737行) 2.2 加入新的JSON支持方法 Js代码 function objToJSONString(obj, filter){ return JSON.stringify(obj, filter); } function parseObjectToJSON(object, filter){ return JSON.parse(object, filter); } 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(params) 2.3.2 继续在transport.js搜索result.parseJSON() 改为 parseObjectToJSON(result)(具体在408行左右) 3、修复旧JSON调用地方 简单来说就是把所有*.toJSONString() 的调用改为用objToJSONString(*),而*.parseJSON()改为parseObjectToJSON(*)。 例如: comm.js里面第一个函数里面的 Ajax.call(flow.php?step=add_to_cart, goods= + goods.toJSONString(), addToCartResponse, POST, JSON); 要改为Ajax.call(flow.php?step=add_to_cart, goods= + objToJSONString(goods), addToCartResponse, POST, JSON); comm.js里面还有一些Ajax.call调用tojsonstring的,都需要按照本例替换。 但非不得已不建议把一切旧的调用都修复,应该选择性的修复,应当出现冲突的地方我们才必须去修复。 就是说哪里调用了jQuery,就把修正后的transport.js及json2.js导入,并且修复toJSONString与 parseJSON方法,其他页面几不必了。 所以说,也不建议在header里面就加入了jQuery,因为这样每个页面都会出现冲突了,修复工资也比较麻烦了,能避免尽量避免了。 最好的解决方案就坐等ECShop来搞定了。 同样的,这次的冲突不

文档评论(0)

htfyzc + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档