当使用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