ecshop 兼容jquery 最完美的解决方案

本文分析了ECSHOP中的transport.js文件导致与jQuery冲突的原因,并提出了一个兼容性的完美解决方案。通过修改transport.js并在冲突页面引入自定义的obj2str方法,避免了JSON.stringify与jQuery的冲突,确保了页面正常运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ecshop 兼容jquery 最完美的解决方案
原因分析:
在transport.js文件中,大概 580行到590行之间,这个句用于格式化json,他重写了object的结构,导致于js框架冲突。冲突的原因是jquery给一个object增加了很多元素,那么在Object.prototype.toJSONString = function () 这个函数中 for (k in this) 语句中进行了无数次的循环,导致网页很卡,并且在IE中会报错。

解决方案 我们最完美的解决方案是,用到jquery的页面就用jquery 否则 保持原来的照常可以用
1. 修改transport.js文件在文件最末尾添加 一个方法 代码如下

/* *
* 修正json.prototype信息
*/
function obj2str(o){
// 兼容 jquery
// 先删除 ecshop 的 跟jquery 冲突对象
//delete Object.prototype.toJSONString;

var r = [];
if(typeof o =="string") return "\""+o.replace(/([\'\"\\])/g,"\\$1").replace(/(\n)/g,"\\n").replace(/(\r)/g,"\\r").replace(/(\t)/g,"\\t")+"\"";
if(typeof o =="undefined") return "undefined";
if(typeof o == "object"){
    if(o===null) return "null";
    else if(!o.sort){
        for(var i in o)
            r.push("\""+i+"\""+":"+obj2str(o[i]))
        r="{"+r.join()+"}"
    }else{
        for(var i =0;i<o.length;i++)
            r.push(obj2str(o[i]))
        r="["+r.join()+"]"
    }
    return r;
}
return o.toString();

}

2 在前台涉及到导入transport.js文件并且和jquery冲突的的html页面同时又用jquery的页面 底部加入如下js

// 兼容 jquery // 然后删除 ecshop 的 跟jquery 冲突对象 delete Object.prototype.toJSONString;

例如: 我的flow.dwt页面有 jquery 冲突 修改下面
Ajax.call(‘flow.php?step=add_to_cart’, ‘goods=’ + goods.toJSONString(), collect_to_flow_response, ‘POST’, ‘JSON’);
改成
Ajax.call(‘flow.php?step=add_to_cart’, ‘goods=’ + obj2str(goods), collect_to_flow_response, ‘POST’, ‘JSON’);

其实就是 goods.toJSONString() 换成 obj2str(goods) 测试 ok 没问题。
经过很长一段时间使用 没发现问题。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值