剛剛在項目中解決了jQuery中的函數變量$衝突問題。在使用jQuery的下拉菜單應用到實際項目中,又碰到了jQuery.js與json.js不兼容的情況。
主要原因是:
jquery給object增加了很多元素,那麼在json.jar大概99行的位置
在Object.prototype.toJSONString = function ()方法中。
for (i in this) {
if(this.hasOwnProperty(i)){
報:對象不支持此屬性或方法。
目前的麻煩點是:系統是一個老項目。新增的一個頁面增加了JS庫jQuery.js。最好的方式是不採用jQuery,重寫新增功能的下拉菜單。但是時間比較緊急,而json.jar卻是一個基礎JS。json.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庫。兼容問題很多。