0

我有以下代码:

$.getJSON('data.json', function(data) {
  var items = [];

  $.each(data, function(key, val) {
    items.push('<option id="' + key + '">' + val + '</option>');
  });

  $('<select/>', {
    'class': 'my-new-list',
    html: items.join('')
  }).appendTo('body');
});

这适用于简单的 JSON 文件,但我有一些更复杂的数据(这就是给我的方式):

{
   "Shares": [
   {
      "shareName": "Frontier",
      "shareID": "FML"
   },
   {
      "shareName": "Global Petroleum",
      "shareID": "GBP"
   },
   {
      "shareName": "Tower Petroleum",
      "shareID": "TRP"
   },
   {
      "shareName": "Aquarius Platinum",
      "shareID": "AQP"
   }
   ]
}

这只是填充了一个下拉菜单,我应该如何修改语法以便读取共享中每个的“ShareName”?

谢谢!

谢谢大家的回答,我只能选择一个所以选择了第一个回复,但我真的很感谢大家的意见!

4

4 回答 4

1

首先,您将不得不迭代data.Shares。注意大写S;JavaScript 区分大小写。

您还必须引用shareNameandshareID属性,而不仅仅是键和值。

  $.each(data.Shares, function(_, val) {
    items.push('<option id="' + val.shareID + '">' + val.shareName + '</option>');
  });

为了巩固理解,您所拥有的是一个对象 ( data),它具有一个属性 ( Shares),它是一个对象数组。该数组中的每个对象都有 2 个属性;shareIDshareName

于 2012-09-28T13:31:10.657 回答
1

Iterate over data.Shares,但我建议<option>直接创建元素而不是通过连接 HTML 来确保正确转义任何元字符:

$select = $('<select/>', {
    'class': 'my-new-list',
});

$.each(data.Shares, function(index, val) {
    $('<option>', {
       id: val.shareID, val: val.shareID, text: val.shareName
    }).appendTo($select);
});

$select.appendTo('body');

请注意,我还将共享 ID 放入<option>值中,以便您可以在后端使用该缩写标记而不是完整的共享名称。

于 2012-09-28T13:35:05.807 回答
0

解析后,它是一个 javascript 对象,因此不是迭代数组,而是迭代由Shares字段命名的数组:

$.each(data.Shares, function(key, val) {
  items.push('<option id="' + val.shareID + '">' + val.shareName + '</option>');
});
于 2012-09-28T13:32:50.173 回答
0
    $.each(data.Shares, function(val) {
         items.push('<option id="' + val.ShareId+ '">' + val.ShareName+ '</option>');
    });
于 2012-09-28T13:35:04.180 回答