jQuey與json.jar的衝突問題

gyd1發表於2009-05-30

剛剛在專案中解決了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庫。相容問題很多。

相關文章