我有两种类型的值的json数据。首先,只有一个元素将被插入到下拉列表中,而其他多个项目则可以被插入到下拉列表中
JS:
var data =
{
"GETBILLERRESPONSE":
{
"RESPONSECODE":"0","RESPONSEMESSAGE":"Success","BILLERS":
{
"BILLER":{
"@ID":"6","@EIDENFORCED":"FALSE","@ISGETBALANCE":"TRUE","#text":"POP CORN MANIA","SERVICES":null
}
}
}
};
var data1 = {
"GETBILLERRESPONSE":
{
"RESPONSECODE":"0","RESPONSEMESSAGE":"Success","BILLERS":
{
"BILLER":
[
{
"@ID":"1","@EIDENFORCED":"TRUE","@ISGETBALANCE":"TRUE","#text":"Mumbai Bill Payment","SERVICES":{
"SERVICE":
[
{
"@ID":"1","#text":"Bill Payment"
},
{
"@ID":"2","#text":"Fine Payment"
}
]
}
},
{
"@ID":"7","@EIDENFORCED":"FALSE","@ISGETBALANCE":"TRUE","#text":"Delhi Bill Payment","SERVICES":null
},
{
"@ID":"23","@EIDENFORCED":"FALSE","@ISGETBALANCE":"TRUE","#text":"Chennai Bill Payment","SERVICES":null
}
]
}
}
};
var ResponseMessage = data1.GETBILLERRESPONSE.RESPONSEMESSAGE;
if (ResponseMessage == "Success")
{
var k=0;
var Html = "<option value=\"-1\">" + "Please select a payee." + "</option>";
var lenforbillers = data1.GETBILLERRESPONSE.BILLERS.BILLER.length;
var objforbillers = data1.GETBILLERRESPONSE.BILLERS.BILLER;
for (k = 0; k < lenforbillers; k++)
{
Html += "<option value=\"" + (objforbillers[k]['@ID']) + "\">" + (objforbillers[k]['#text']) + "</option>";
}
$("#dlInstantPayPayeee").html(Html);
}
我的问题:
data1
但不适用,data
因为data
它仅包含一个元素小提琴:http : //jsfiddle.net/E7zhK/3/
1)如果json嵌套列表中只有一个元素,为什么我不能使用数组index [0]来检索它?
因为该对象上没有名称为的属性"0"
。
2)我的for循环代码适用于data1,但不适用于data,因为数据仅包含一个元素
3)我如何只编写一段代码即可创建下拉列表,而与json中的嵌套元素无关
好吧,我会从源头上修复它。返回一个还是多个无关紧要,它应该返回一个一致的数据结构。
但是,如果您不能依靠它,则必须检查是否要返回数组:
if ($.isArray(data1.GETBILLERRESPONSE.BILLERS.BILLER) {
// It's an array
}
else {
// It's not
}
然后,您可以采取相应的行动。一个简单的答案是使其成为数组:
if (ResponseMessage == "Success")
{
var k=0;
var Html = "<option value=\"-1\">" + "Please select a payee." + "</option>";
var objforbillers = data1.GETBILLERRESPONSE.BILLERS.BILLER;
if (!$.isArray(objforbillers)) { // <== New
objforbillers = [objforbillers]; // <== New
} // <== New
var lenforbillers = objforbillers.length; // <== Moved and modified
for (k = 0; k < lenforbillers; k++)
{
Html += "<option value=\"" + (objforbillers[k]['@ID']) + "\">" + (objforbillers[k]['#text']) + "</option>";
}
$("#dlInstantPayPayeee").html(Html);
}
或者,将for
循环的主体排除在外(在这种情况下,它是单线的,但在一般情况下可能不是),然后适当地重用它:
if (ResponseMessage == "Success")
{
var k=0;
var Html = "<option value=\"-1\">" + "Please select a payee." + "</option>";
var objforbillers = data1.GETBILLERRESPONSE.BILLERS.BILLER;
var lenforbillers;
if ($.isArray(objforbillers)) {
lenforbillers = objforbillers.length;
for (k = 0; k < lenforbillers; k++)
{
Html += optionHtml(objforbillers[k]);
}
}
else {
Html += optionHtml(objforbillers);
}
$("#dlInstantPayPayeee").html(Html);
}
function optionHtml(entry) {
return "<option value=\"" + entry['@ID'] + "\">" + entry['#text'] + "</option>";
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句