Javascript 循环浏览json数据以创建下拉列表
我有两种类型的值的json数据。在第一种情况下,只有一个元素将被插入到下拉列表中,而在其他情况下,可以将多个项目插入到下拉列表中 JS:Javascript 循环浏览json数据以创建下拉列表,javascript,jquery,json,Javascript,Jquery,Json,我有两种类型的值的json数据。在第一种情况下,只有一个元素将被插入到下拉列表中,而在其他情况下,可以将多个项目插入到下拉列表中 JS: var数据= { “GETBILLERRESPONSE”: { “RESPONSECODE:“0”,“RESPONSEMESSAGE:“Success”,“BILLERS:” { “BILLER”:{ “@ID:”6“,“@EID:”FALSE“,“@ISGETBALANCE:”TRUE“,“#text:”爆米花狂热“,”服务“:”null } } } };
var数据=
{
“GETBILLERRESPONSE”:
{
“RESPONSECODE:“0”,“RESPONSEMESSAGE:“Success”,“BILLERS:”
{
“BILLER”:{
“@ID:”6“,“@EID:”FALSE“,“@ISGETBALANCE:”TRUE“,“#text:”爆米花狂热“,”服务“:”null
}
}
}
};
变量数据1={
“GETBILLERRESPONSE”:
{
“RESPONSECODE:“0”,“RESPONSEMESSAGE:“Success”,“BILLERS:”
{
“BILLER”:
[
{
“@ID:”1“,“@EID:”真“,“@ISGETBALANCE:”真“,“#text:”孟买账单支付“,”服务“:{
“服务”:
[
{
@ID:“1”,#text:“账单付款”
},
{
@ID:“2”,#text:“罚款”
}
]
}
},
{
“@ID:”7“,“@EID:”FALSE“,“@ISGETBALANCE:”TRUE“,“#text:”德里账单支付“,”服务“:”null
},
{
“@ID:”23“,“@EID:”FALSE“,“@ISGETBALANCE:”TRUE“,“#text:”金奈账单支付“,”服务“:”null
}
]
}
}
};
var ResponseMessage=data1.GETBILLERRESPONSE.ResponseMessage;
如果(ResponseMessage==“成功”)
{
var k=0;
var Html=“”+”请选择收款人。“+”;
var lenforbillers=data1.GETBILLERRESPONSE.BILLERS.BILLER.length;
var objforbillers=data1.GETBILLERRESPONSE.BILLERS.BILLER;
对于(k=0;k
我的问题是:
data1
,但不适用于data
,因为data
只包含一个元素“0”
的属性
2) 我的for循环代码适用于data1,但不适用于data,因为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);
}
1) 如果json嵌套列表中只有一个元素,为什么我不能使用数组索引[0]检索它
因为该对象上没有名为“0”
的属性
2) 我的for循环代码适用于data1,但不适用于data,因为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);
}
您的第一个数据语法丢失
"BILLER":
[
{
"@ID":"6","@EIDENFORCED":"FALSE","@ISGETBALANCE":"TRUE","#text":"POP CORN MANIA","SERVICES":null
}
]
第一个数据语法丢失
"BILLER":
[
{
"@ID":"6","@EIDENFORCED":"FALSE","@ISGETBALANCE":"TRUE","#text":"POP CORN MANIA","SERVICES":null
}
]
如果您将第一个
数据
对象更改为此
var data = {
"GETBILLERRESPONSE": {
"RESPONSECODE":"0","RESPONSEMESSAGE":"Success","BILLERS": {
"BILLER": [ {
"@ID":"6","@EIDENFORCED":"FALSE","@ISGETBALANCE":"TRUE","#text":"POP CORN MANIA","SERVICES":null
} ]
}
}
};
您的代码片段在这两种情况下都能正常工作;这意味着当前对象具有不同的结构。对象
数据的帐单不是正确的数组,因此无法按索引访问内容。如果将第一个数据对象更改为此
var data = {
"GETBILLERRESPONSE": {
"RESPONSECODE":"0","RESPONSEMESSAGE":"Success","BILLERS": {
"BILLER": [ {
"@ID":"6","@EIDENFORCED":"FALSE","@ISGETBALANCE":"TRUE","#text":"POP CORN MANIA","SERVICES":null
} ]
}
}
};
您的代码片段在这两种情况下都能正常工作;这意味着当前对象具有不同的结构。您的对象数据的帐单不是正确的数组,因此您无法按索引访问内容。Clean&Complete!非常感谢。干净完整!非常感谢。