jQuey與json.jar的衝突問題

剛剛在項目中解決了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庫。兼容問題很多。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章