jQuey与json.jar的冲突问题

    技术2022-05-12  15

    刚刚在项目中解决了jQuery中的函数变量$冲突问题。在使用jQuery的下拉菜单应用到实际项目中,又碰到了jQuery.jsjson.js不兼容的情况。

     主要原因是:

    jqueryobject增加了很多元素,那么在json.jar大概99行的位置

    Object.prototype.toJSONString = function ()方法中。

    for (i in this) {

        if(this.hasOwnProperty(i)){

     :对象不支持此属性或方法。

    目前的麻烦点是:系统是一个老项目。新增的一个页面增加了JSjQuery.js。最好的方式是不采用jQuery,重写新增功能的下拉菜单。但是时间比较紧急,而json.jar却是一个基础JSjson.jar是不能删除的。又没时间重写下拉菜单的实现。采用了一种折中的方式处理此问题。暂时解决了js库的冲突。增加异常判断。忽略异常。

    修改json.jar中的Object.prototype.toJSONString方法如下:

      Object.prototype.toJSONString = function () {

        var a = ['{'], b, i, v;

        function p(s) {

            if (b) {

                a.push(',');

            }

            a.push(i.toJSONString(), ':', s);

            b = true;

        }

        for (i in this) {

                  var b=false;

                  try{

                         b=this.hasOwnProperty(i);

                  }catch{

                b=false;

                  }

            if (b) {

                v = this[i];

                switch (typeof v) {

                case 'undefined':

                case 'function':

                case 'unknown':

                    break;

                case 'object':

                    if (v) {

                        if (typeof v.toJSONString === 'function') {

                            p(v.toJSONString());

                        }

                    } else {

                        p("null");

                    }

                    break;

                default:

                    p(v.toJSONString());

                }

            }

        }

        a.push('}');

        return a.join('');

    };

    教训: 在不是很了解新的js库之前,不要冒然使用。尤其是在老的项目中使用。另外:

    再好不要采用prototype.js+json.js+jQuery.js组合的JS库。兼容问题很多。


    最新回复(0)