文档章节

解决ECSHOP中transport.js和jquery的冲突

adbug
 adbug
发布于 2015/06/17 09:27
字数 766
阅读 54
收藏 0

方案一:

本人亲测过,可以用。有的人说需要删除js目录下的gobal.js文件,否则依然会冲突。我没删除也解决了冲突。

1、加入JSON2.js文件

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

http://www.json.org/js.html

加入json2.js例如{insert_scripts files='transport.js,utils.js,json2.js'}

2、修改transport.js

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

1
if  ( ! Object.prototype.toJSONString) {

这一段代码,然后把里面的内容全部注释掉。(我的是注释掉496-737行)

2.2 加入新的JSON支持方法

1
2
3
4
5
6
7
8
9
10
11
12
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(*)。

例如: common.js里面第一个函数里面的

1
Ajax.call(‘flow.php?step=add_to_cart’, ‘goods=’ + goods.toJSONString(), addToCartResponse, ‘POST’, ‘JSON’);

  要改为

1
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模板兼容jquery问题, 一直是困扰开发人员的棘手问题,主要原因是 transprot.js  文件中,大概 580行到590行之间,这个句用于格式化json,他重写了object的结构,导致于js框架冲突。冲突的原因是jquery给一个object增加了很多元素,那么在Object.prototype.toJSONString = function () 这个函数中 for (k in this) 语句中进行了无数次的循环,导致网页很卡,并且在IE中会报错。

 

 ECSHOP开发中心为您提供一个简单的解决transport.js 和 jquery 方法:

在 page_header.lbi 库文件中加入如下代码,注意操作顺序:

 

1.先导入transport.js  文件 {insert_scripts files='transport.js,utils.js'}

 

2.然后导入您网站使用的jquery文件  

   <script language="javascript" src="您的jquery存放路径"></script>

 

3.加入代码

<script type="text/javascript">
$(function() {
window.__Object_toJSONString = Object.prototype.toJSONString;
delete Object.prototype.toJSONString;
});
</script>

本文转载自:http://blog.csdn.net/fgdfgasd/article/details/12132043

共有 人打赏支持
adbug
粉丝 7
博文 176
码字总数 198249
作品 0
成都
私信 提问
Ecshop_Jquery冲突的完美解决方案​

Ecshop与Jquery冲突的完美解决方案 ecshop把AJAX事件和JSON解析的模块放在common/transport.js之中,可以说它也有自己封装的一套工具,这其实是很正常的。 但恰恰的,在封装JSON各种方法的同...

喵王不瞌睡
2014/07/07
0
0
重构ECShop中的Javascript(一)

ECShop一直有一个很大的问题,就是其自带的JS脚本和jQuery为主的不少使用非常多的JS框架冲突,这个冲突导致了我们在制作ECShop模板的时候,很多优秀的界面效果无法实现。可以说是ECShop最让人...

icebird
2012/11/27
0
0
ECSHOP_jquery兼容方案

ecshop把AJAX事件和JSON解析的模块放在common/transport.js之中,可以说它也有自己封装的一套工具,这其实是很正常的。 但恰恰的,在封装JSON各种方法的同时对object的模型进行了重写,这个就...

喵王不瞌睡
2014/07/09
0
0
jquery中的show()方法如何用javascript实现

由于一直没法解决ECShop和jQuery的兼容问题,只能使用基本的javascript。 如题,jquery中的show("fast")方法怎么在JS中实现,element.display="block"/"nonw"不是我想要的方法,我希望是对象......

carl.he
2012/12/13
4.8K
4
PHP求兼职

1. 熟练掌握php,精通canphp框架,了解thinkphp 2. 熟练掌握JavaScript,jquery,熟悉linux,apache的基本操作 3. 熟悉sql2005, MySQL,熟悉设计模式 4. 熟悉XML、json、AJAX、MVC等技术 5. 熟...

学在囧途
2012/12/01
447
3

没有更多内容

加载失败,请刷新页面

加载更多

tac 与cat

tac从后往前看文件,结合grep使用

writeademo
28分钟前
2
0
表单中readonly和dsabled的区别

这两种写法都会使显示出来的文本框不能输入文字, 但disabled会使文本框变灰,而且通过通过表单提交时,获取不到文本框中的value值(如果有的话), 而readonly只是使文本框不能输入,外观没...

少年已不再年少
49分钟前
2
0
SpringBoot上传图片操作

首先有个上传文件的工具类 /** * 文件上传 * @param file * @param filePath * @param fileName * @throws Exception */public static void uploadFile(byte[] file, String ...

_liucui_
今天
6
0
DrawerLayout

public class MainActivity extends BaseActivity implements NavigationView.OnNavigationItemSelectedListener,OnFragmentInteractionListener{ public NavigationView navView; ......

安卓工程师王恒
今天
1
0
python精简笔记

python精简笔记-字符串基本用法 字符串常见用法: * encode() # 编码成bytes类型 * find() # 查找子串 * index() # 获取下标 * replace() # 替换子串 * len(string) # 返回字符串长度,...

平头哥-Enjoystudy
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部