當使用AJAX時,我傾向於將對象從我的服務器以JSON對象(又名Javascript)的形式傳遞給Javascript。我的Javascript中的某些函數依賴於我正在使用的特定類型的對象。例如,讓我們用一個電話號碼爲例。我有一個構造函數:將JSON對象映射到Javascript對象
function PhoneNumber(number, type, isPrimary, contactId, id, className) {
this.number = number;
this.type = type;
this.isPrimary = isPrimary;
this.contactId = contactId;
this.id = id;
this.className = className;
}
我在Javascript中創建電話號碼對象時使用了哪一個。在某些情況下,我不會在JS中創建對象,我從服務器獲取對象,因此它以具有完全相同字段的通用對象的形式出現。所以,當我的代碼使用一些諸如這依賴於特定類型:
var objType = objArray[i].constructor.name;
var mappedObj;
switch(objType) {
case 'PhoneNumber':
currentArray = currentArray.phone;
//Convert response to javascript object.
mappedObj = mapPhone(jsonResponse[i]);
break;
case 'Email':
currentArray = currentArray.email;
mappedObj = mapEmail(jsonResponse[i]);
break;
case 'Address':
currentArray = currentArray.address;
mappedObj = mapAddress(jsonResponse[i]);
break;
case 'Website':
currentArray = currentArray.website;
mappedObj = mapWebsite(jsonResponse[i]);
}
在這種情況下,我檢查對象的構造函數的名稱,並基於該名稱設置某些變量。如果我檢查名稱的對象是來自服務器的JSON,它只是給我一個通用的「對象」響應,因此代碼不起作用。我通過使用映射函數爲每個對象解決這個問題,例如:
function mapPhone(phoneObj) {
var id = phoneObj.id;
var contactId = phoneObj.contactId;
var number = phoneObj.number;
var type = phoneObj.type;
var primary = phoneObj.isPrimary;
var className = phoneObj.className;
var phoneNumber = new PhoneNumber(number, type, primary, contactId, id, className);
return phoneNumber;
}
這工作得很好,但對我來說似乎有點多餘。這是解決JSON對象問題的最佳方法,還是有更好的解決方案?我知道這更像是一個「我是否儘可能做到最好的方式」類型的問題,但我常常在我的Javascript代碼中重複這種類型的邏輯,並且我想我可能會就另一個或兩個問題得到另一個意見在我必須花費一小時一小時修復它之前做到這一點的正確方法。
編輯:我結束了接受jQuery解決方案,因爲我碰巧在我的項目中使用jQuery。然而,在我找到jQuery選項之前,有多種解決方案也適用於我。他們只是沒有那麼幹淨和高效。
* 「JSON對象(又稱JavaScript)」 * JSON是不是又名的JavaScript。它有自己的名字,因爲它有自己的語法和規範。 – 2012-01-09 02:37:36