【问题标题】:Can't find error in my json and javascript file在我的 json 和 javascript 文件中找不到错误
【发布时间】:2020-10-13 04:27:10
【问题描述】:

我正在制作一个食品订购系统。现在我必须制作一个购物车页面,以便在我单击它时立即将商品添加到其中。我制作了一个包含所有商品的 json 文件和一个运行它的 js 文件。我没有收到任何错误,但没有输出 这是我的 json 代码:

[
  {
    "id": 0,
    "name": "Lasagna",
    "picture": "images/lasagna.jpg",
    "price": 500
  },
  {
    "id": 1,
    "name": "Mexican Pizza",
    "picture": "images/mpizza.jpg",
    "price": 310
  },
  {
    "id": 2,
    "name": "Tiramisu Shake",
    "picture": "images/tiramisu.jpg",
    "price": 290
  },
  {
    "id": 3,
    "name": "Penne Pasta",
    "picture": "images/ppizza.jpg",
    "price": 280
  },
  {
    "id": 4,
    "name": "Classic Maggi",
    "picture": "images/maggi.jpg",
    "price": 120
  },
  {
    "id": 5,
    "name": "Nachos",
    "picture": "images/nachos.jpg",
    "price": 250
  },
  {
    "id": 6,
    "name": "Margarita Pizza",
    "picture": "images/margarita.jpg",
    "price": 220
  },
  {
    "id": 7,
    "name": "Kitkat Shake",
    "picture": "images/kitkat.jpg",
    "price": 310
  },
  
]

这是我的 js 代码:

$.getJSON('food.json', function(data) {
  var foodRow = $('#foodRow');
  var foodTemplate = $('#foodTemplate');

  for (i = 0; i < data.length; i ++) {
    foodTemplate.find('.panel-title').text(data[i].name);
    foodTemplate.find('img').attr('src', data[i].picture);
    foodTemplate.find('.price').text(data[i].price);
    foodTemplate.find('.btn-success').attr('data-id', data[i].id);
    console.log(data[i].id)
    foodRow.append(foodTemplate.html());
  }
});

$("button").click(function(){
  var i = $(this).attr("data-id");
  console.log(i);
  ('$out').text(i)
});

html代码:

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <title>Foodzie</title>
  <script src="jquery-3.5.1.min.js"></script>
  <!-- FONT AWESOME -->
  <script src="https://kit.fontawesome.com/887e6e97bd.js" crossorigin="anonymous"></script>
  <!-- CSS STYLESHEET -->
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
  <!-- FONTS -->
  <link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@900&family=Ubuntu:wght@500&display=swap" rel="stylesheet">
  <link rel="stylesheet" href="css/styles.css">
  <script src="food.js" charset="utf-8"></script>

<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>


</head>
<body>

  <section id="title">

    <!-- Nav Bar -->
    <div class="fluid-container">
     <nav class="navbar navbar-expand-lg navbar-dark">
        <a class="navbar-brand" href="">FoodZie</a>
         <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
      </button>
      <div class="collapse navbar-collapse" id="navbarSupportedContent">
        <ul class="navbar-nav ml-auto">
            <li class="nav-item">
                <a class="nav-link" href="#">View Menu</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" href="#">Add Items</a>
            </li>

        </ul>
       </div>
      </nav>

    </div>
  </section>

  <div class="fluid-container">

  <div id="foodRow" class="row">
        <!-- PETS LOAD HERE -->
  </div>

<div id="foodTemplate" style="display: none;">
  <div class="col-sm-6 col-md-4 col-lg-3">
    <div class="panel panel-default panel-pet">
      <div class="panel-heading">
        <br>
        <h3 class="panel-title">Pizza</h3>
      </div>
      <div class="panel-body">
        <img alt="140x140" data-src="holder.js/140x140" class="img-rounded img-center" style="width: 100%;" src="images/mpizza.jpg" data-holder-rendered="true" height="140" width="140">
        <br/><br/>
        <strong>Cost</strong>: <span class="price">250</span><br/><br/>
        <button class="btn btn-success" type="button" data-id="0" id = "cart">Add to Cart</button><br>
        <p id=out></p>
        <br>
      </div>
    </div>
  </div>
</div>
</div>
</div>

</body>


</html>

【问题讨论】:

  • 添加您的 html 代码以加深理解
  • ('$out').text(i) 是什么?不应该是$('$out').text(i)
  • 这个console.log(data[i].id) 会打印在浏览器控制台中吗?
  • 您的问题不清楚,您想“在我点击后立即添加到它的哪个位置。”?你想把它添加到你当前的 food.json 中吗?还是只显示在 .out 容器中? “输出不来”是指数据没有成功存储在json中吗?
  • 添加了我的 html 代码

标签: javascript html jquery json


【解决方案1】:

您当前的code 中很少有问题。您的JSON 文件中有额外的,静默会引发错误,但不会显示在控制台中。

其次,您没有正确显示添加到cart 按钮的data-id 您的syntax 不正确。

$('#out').text(i)

此外,您正在加载 DOM 后动态添加产品,因此在这种情况下您需要使用 event Delegation 将事件附加到您的 Add to Cart 按钮。

$(document).on('click', '.cart', function(){
  var i = $(this).data("id"); //get the data-id of the clicked button
  console.log(i);
  $('#out').text(i)
});

请注意,我还在“添加到购物车”&lt;button class="btn btn-success cart" type="button" data-id="0"&gt;Add to Cart&lt;/button&gt;&lt;br&gt; 按钮中使用了class 选择器 - 每个按钮的id's 必须是唯一的,以避免出现问题。

完整的工作代码:

//Food JSON file
var data = [
  {
    "id": 0,
    "name": "Lasagna",
    "picture": "images/lasagna.jpg",
    "price": 500
  },
  {
    "id": 1,
    "name": "Mexican Pizza",
    "picture": "images/mpizza.jpg",
    "price": 310
  },
  {
    "id": 2,
    "name": "Tiramisu Shake",
    "picture": "images/tiramisu.jpg",
    "price": 290
  },
  {
    "id": 3,
    "name": "Penne Pasta",
    "picture": "images/ppizza.jpg",
    "price": 280
  },
  {
    "id": 4,
    "name": "Classic Maggi",
    "picture": "images/maggi.jpg",
    "price": 120
  },
  {
    "id": 5,
    "name": "Nachos",
    "picture": "images/nachos.jpg",
    "price": 250
  },
  {
    "id": 6,
    "name": "Margarita Pizza",
    "picture": "images/margarita.jpg",
    "price": 220
  },
  {
    "id": 7,
    "name": "Kitkat Shake",
    "picture": "images/kitkat.jpg",
    "price": 310
  }
]

//$.getJSON('food.json', function(data) { //un comment this in your code
  var foodRow = $('#foodRow');
  var foodTemplate = $('#foodTemplate');

  for (i = 0; i < data.length; i ++) {
    foodTemplate.find('.panel-title').text(data[i].name);
    foodTemplate.find('img').attr('src', data[i].picture);
    foodTemplate.find('.price').text(data[i].price);
    foodTemplate.find('.btn-success').attr('data-id', data[i].id);
    //console.log(data[i].id)
    foodRow.append(foodTemplate.html());
  }
//});

//Click event
$(document).on('click', '.cart', function(){
  var i = $(this).data("id");
  console.log(i);
  $('#out').text(i)
});
<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <title>Foodzie</title>
  <!-- FONT AWESOME -->
  <script src="https://kit.fontawesome.com/887e6e97bd.js" crossorigin="anonymous"></script>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">

<!-- jQuery library -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

<!-- Popper JS -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>

<!-- Latest compiled JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>

</head>
<body>

  <section id="title">

    <!-- Nav Bar -->
    <div class="fluid-container">
     <nav class="navbar navbar-expand-lg navbar-dark">
        <a class="navbar-brand" href="">FoodZie</a>
         <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
      </button>
      <div class="collapse navbar-collapse" id="navbarSupportedContent">
        <ul class="navbar-nav ml-auto">
            <li class="nav-item">
                <a class="nav-link" href="#">View Menu</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" href="#">Add Items</a>
            </li>

        </ul>
       </div>
      </nav>

    </div>
  </section>

  <div class="fluid-container">

  <div id="foodRow" class="row">
        <!-- PETS LOAD HERE -->
  </div>

<div id="foodTemplate">
  <div class="col-sm-6 col-md-4 col-lg-3">
    <div class="panel panel-default panel-pet">
      <div class="panel-heading">
        <br>
        <h3 class="panel-title">Pizza</h3>
      </div>
      <div class="panel-body">
        <img alt="140x140" data-src="holder.js/140x140" class="img-rounded img-center" style="width: 100%;" src="images/mpizza.jpg" data-holder-rendered="true" height="140" width="140">
        <br/><br/>
        <strong>Cost</strong>: <span class="price">250</span><br/><br/>
        <button class="btn btn-success cart" type="button" data-id="0">Add to Cart</button><br>
        <p id='out'></p>
        <br>
      </div>
    </div>
  </div>
</div>
</div>
</div>

</body>
</html>

【讨论】:

    猜你喜欢
    • 2014-02-02
    • 2018-01-24
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2018-11-09
    相关资源
    最近更新 更多