当进行jQuery ajax调用时,生成的jqXHR变量data
将传递给下面的渲染函数renderData
。该函数通过仅填充$type
对象的一个属性来确定数据的来源。
有什么方法可以找出填充了哪个属性,以及数据来自何处?
function renderData(data){
var $type = {
contact : $(data).filter('#contact'),
details : $(data).find('#details'),
other : $(data).find('#other')
};
// Get the populated property and store its value in "endResult"
endResult.appendTo('#wrapper').hide().fadeIn();
};
答案 0 :(得分:1)
我可能会使用for...in
循环来查找属性并将其封装在函数中。
<强> jsFiddle 强>
var type1 = {
contact : 'a',
details : undefined,
other : undefined
};
var type2 = {
contact : undefined,
details : undefined,
other : 'b'
};
var type1Prop = getPopulatedProperty(type1);
alert(type1Prop + ' = ' + type1[type1Prop]);
var type2Prop = getPopulatedProperty(type2);
alert(type2Prop + ' = ' + type2[type2Prop]);
function getPopulatedProperty(obj) {
for (var prop in obj) {
if (obj[prop] !== undefined && obj[prop] !== null && obj[prop] !== '') {
return prop;
}
}
return undefined;
}
答案 1 :(得分:1)
我认为你也是创造这个对象的人,对吧?为什么不简单地向对象添加一个属性来告诉你它的用途呢?
例如,如果通过从PHP回显JSON来创建对象,则可以添加“type”属性:
echo('{"type": "contactForm", ...your data goes here}');
这样,渲染函数变为:
function renderData(data){
var $type = data.type;
...
};
如果您是对象的作者,则可以使您不必遍历属性以找出您应该已经知道的内容。如果您使用的是无法控制的对象,那么Daniel的解决方案就应该这样做。