AJAXを使用する場合、私のサーバーからJSONオブジェクト(別名Javascript)の形でJavascriptにオブジェクトを渡す傾向があります。私のJavascript内の特定の関数は、私が使用しているオブジェクトの特定の型に依存しています。たとえば、電話番号を使用することができます。私はコンストラクタを持っています:JavascriptオブジェクトへのJSONオブジェクトのマッピング
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である場合、それは単に私にジェネリックな "Object"レスポンスを与え、コードは機能しません。
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コードで繰り返し、私は別の意見を得るかもしれません。これを行うための適切な方法は、私は時間をかけてそれを修正しなければなりません。
EDIT:プロジェクトでjQueryを使用するため、jQueryソリューションを受け入れることになりました。しかし、jQueryオプションを見つける前に、私のために働いていた複数のソリューションもあります。彼らはきれいで効率的ではありませんでした。
* "JSONオブジェクト(別名Javascriptを)" * JSONはJavaScriptを別名ではありません。それは独自の構文と仕様を持っているため、独自の名前を持っています。 –