明凯博客

关注网站技术,一个特立独行的程序员

Ecshop解决jQuery和toJSONString()的冲突的办法

我做的ecshop模版因为要用到jquery,出现了很多问题,首先就是兼容的问题。

看了很多ecshop怎样解决和jQuery的冲突,好像就一种方法,其本质就都是把transport.js中的toJSONString这个方法替换掉。

我们写系统一般都不会污染全局变量,但是ecshop直接改了系统方法,导致和jquery里面的变量冲突。

那么,我们就的把js中和模板中用到toJSONString方法的地方替换掉。

一、可以自己写一个方法来替换toJSONString这个方法

二、可以用jQuery的插件jQuery-json.js这个插件里面的方法$.toJSON()来替换toJSONString()这个方法

以上两个都要在用到toJSONString方法的模板里面引入这个方法。那么我们来看看那一些文件用到了这个方法呢。

    \js\common.js:
1
2
3
 goods.parent   = (typeof(parentId) == "undefined") ? 0 : parseInt(parentId);
 Ajax.call('flow.php?step=add_to_cart', 'goods=' + goods.toJSONString(), addToCartResponse, 'POST', 'JSON');
 }
    \js\compare.js:
1
2
3
4
if ( ! Object.prototype.toJSONString) {
       Array.prototype.toJSONString = function () {
            var a = ['['], // The array holding the text fragments.
                b,         // A boolean indicating that a comma is required.
    \js\transport.js:
1
2
3
4
5
try
{
    legalParams = "JSON=" + params.toJSONString();
}
catch (ex)
    \themes\default\compare.dwt:
1
2
3
4
5
 var date = new Date();
        date.setTime(date.getTime() + 99999999);
        document.setCookie("compareItems", obj.toJSONString());
       }
     }
    \themes\default\flow.dwt:
1
2
3
goods.number   = number;
goods.parent   = 0;
Ajax.call('flow.php?step=add_to_cart', 'goods=' + goods.toJSONString(), collect_to_flow_response, 'POST', 'JSON');
    \themes\default\library\comments_list.lbi:
1
2
3
Ajax.call('comment.php', 'cmt=' + cmt.toJSONString(), commentResponse, 'POST', 'JSON');
     return false;
}

当然,不仅限于我上面写的几处,大家最好还是全局搜索一下,然后改掉所有的比较保险。

, ,

相关文章

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注