При использовании AJAX я, как правило, передаю объекты с моего сервера на Javascript в виде объектов JSON (он же Javascript). Некоторые функции в моем 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-коде, и я полагаю, что я мог бы получить еще одно мнение или два о том, правильный способ сделать это, прежде чем я буду тратить час на час, фиксируя его в будущем.
EDIT: я решил принять решение jQuery, потому что я использовал jQuery в своем проекте. Однако есть несколько решений, которые также работали для меня, прежде чем я нашел параметр jQuery. Они просто были не такими чистыми и эффективными.