AJAX kullanırken, nesneleri sunucudan Javascript'e JSON nesneleri (aka Javascript) biçiminde geçirme eğilimindeyim. Javascript'in içindeki bazı işlevler kullandığım belirli nesne türüne güveniyor. Örneğin, örneğin bir telefon numarası kullanalım. Bir kurucu var: Javascript'te bir telefon numarası nesnesi oluştururken kullandım. Bazı durumlarda, JS'de nesneyi oluşturmuyorum, nesneyi sunucudan alıyorum, böylece aynı alanlara sahip genel bir nesne biçiminde geliyor. Benim kod bunun gibi bir şey kullanarak belirli tipine dayanır ne zaman:JSON Nesneleri Javascript nesnelerine eşleme
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]);
}
Bu durumda, ben nesneleri yapıcı adını ve o adına göre ayarlanmış belirli değişkenleri kontrol edin. İsmi kontrol ettiğim nesne sunucudan bir JSON ise, bana genel bir "Nesne" yanıtı verir ve bu nedenle kod çalışmaz.
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;
}
Bu gayet güzel çalışıyor, ama bana biraz gereksiz görünüyor: Ben gibi nesne her biri için bir eşleştirme işlevini kullanarak bu sorunu olsun. JSON Nesne sorununu çözmenin en iyi yolu bu mu yoksa daha iyi bir çözüm var mı? Bunun daha çok "Bunu mümkün olan en iyi şekilde yapıyorum" türünden bir soru olduğunu anlıyorum, ama Javascript kodumda bu mantıksal mantığı DOĞRULAYI tekrar ediyorum. Bunu yapmanın en doğru yolu, saatte saatte sabitlemem gerekiyor.
DÜZENLEME: jQuery çözümünü kabul ettim çünkü jQuery'yi projemde kullanıyorum. Bununla birlikte jQuery seçeneğini bulmadan önce benim için de çalışan çok sayıda çözüm var. Onlar sadece temiz ve verimli değildi.
* "JSON nesneleri (aka JavaScript)" * JSON aka JavaScript değildir. Kendi adı ve özniteliği olduğu için kendi adı vardır. –