Navigation

Recent site activity

AJAX‎ > ‎

关于ecshop不兼容jquery的解决方法

solution from harrpcms's email
您好,我是harrycms
 
在phpchina上收到您的信息,但由于那个网站已经删除,我把解决方法在这里发给你。
 
问题原因:/js/transport.js  文件  
 Object.prototype.toJSONString = function () {**************} 
大概 580行到590行之间  这个句用于格式化json,他重写了object的结构,导致于js框架冲突,如果要解决需要把这段代码注释掉,然后用别的方式替换。
 
我是将所有用到*.toJSONString的地方,替换成一个函数,例如:
/js/common.js 29行

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

替换成:

 Ajax.call('flow.php?step=add_to_cart', 'goods=' + obj2str(goods), addToCartResponse, 'POST', 'JSON');
obj2str函数如下:
function obj2str(o){
    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();
}
大概这样就可以了,可能还有些脚步错误需要处理,您自己体会下 , 这只是个解决方法,并不一定适用您的网站。

我注释了下面这一段 
  /*
    Object.prototype.toJSONString = function () {
     ......
    // Join all of the fragments together and return.

        a.push('}');
        return a.join('');
    };
 */
我在几个地方作了修改
selectzone.js--  line144
      Ajax.call(this.filename + "&act="+act+"&add_ids=" +selOpt.toJSONString(), args, this.addRemoveItemResponse, "GET", "JSON");
                        line 179
      Ajax.call(this.filename + "&act="+act+"&drop_ids=" + arr.toJSONString(), args, this.addRemoveItemResponse, 'GET', 'JSON');
等等
附件是我的transport.js 文件
Č
ċ
ď
qian meng,
Dec 14, 2008 7:20 AM