javascript - 从 json 创建一个列表返回 [object Object] 并且只返回最后一个 li

标签 javascript jquery json

我正在学习如何使用 JSON 响应。我希望它显示我的 json 中的所有 6 个项目.为什么我只得到最后一项和它之前的 [object Object]

$(document).ready(function() {
  $(function() {
    $.ajax({
      type: 'GET',
      url: 'https://api.myjson.com/bins/e4ei2',
      async: false,
      dataType: 'json',
      success: function(result) {
        var item = "";
        $.each(result, function(index, val) {

          for (var i = 0; i < val.length; i++) {
            var item = val[i];
            console.log(item.stand);
            console.log(item.dishName);
            console.log(item.dishPrice);
            item += " <li><div class='content'><div class='stand-wrapper'><h2 class='stand'>" + item.stand + "</h2></div><div class='dish-wrapper'><p class='dish'>" + item.dishName + "</p></div><div class='price-wrapper'><p class='price'>" + item.dishPrice + "</p></div></div></li>";
          }
          $('ul').html(item);
        });
      }
    });
  });
});

这是 fiddle

最佳答案

首先,删除 async: false 设置。这是非常不好的做法,而且您不需要它,因为您正在正确使用回调。

然后你需要循环result.menu,而不是result。您还在循环的每次迭代中重新声明 item。您将它设置为等于 val[i] 这是一个对象。当您尝试将其连接到一个字符串时,它会被强制转换为 [object Object],然后您会在输出中看到它。

更好的方法是在 menu 中进行一次循环。然后您可以在创建 HTML 字符串时直接访问它的属性。您可以使用 map() 实现此目的:

var result = {
  "menu": [{
    "stand": "Boucherie",
    "dishName": "Faux-filet",
    "dishPrice": "3,45 €"
  }, {
    "stand": "Pâtisserie",
    "dishName": "Mille feuilles",
    "dishPrice": "1,10 €"
  }, {
    "stand": "Le poissonier",
    "dishName": "Filet de bar au citron",
    "dishPrice": "4,60 €"
  }, {
    "stand": "Salad bar",
    "dishName": "Divers crudités"
  }, {
    "stand": "Les Côcottes",
    "dishName": "Rougail saucisse",
    "dishPrice": "2,80 €"
  }, {
    "stand": "Snack",
    "dishName": "Hot-dog",
    "dishPrice": "1,89 €"
  }]
};

// in your AJAX handler:
var html = result.menu.map(function(val) {
  return '<li><div class="content"><div class="stand-wrapper"><h2 class="stand">' + val.stand + '</h2></div><div class="dish-wrapper"><p class="dish">' + val.dishName + '</p></div><div class="price-wrapper"><p class="price">' + val.dishPrice + '</p></div></div></li>';
});
$('ul').html(html);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul></ul>

关于javascript - 从 json 创建一个列表返回 [object Object] 并且只返回最后一个 li,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53008136/

相关文章:

javascript - React CSSTransitionGroup 不为高度、宽度或顶部设置动画

javascript - jQuery:测试元素是否是匹配元素中的第一个

json - 解析json结构的速度

json - 如何使用 Avro 架构来验证 JSON?

javascript - react 更新现有的 css 类

javascript - .getElementById IE

javascript - Bootstrap按钮插件与Vue复选框点击事件冲突

javascript - 获取文本输入字段中的光标位置(以字符为单位)

javascript - 从选择选项中删除项目

java - 如何在解析 JSON 字符串时限制内存使用?