Добавление JSON к таблице с помощью jquery всегда добавляет данные дважды. Не уверены, как это исправить? - PullRequest
0 голосов
/ 02 марта 2020

У меня есть эта супер странная проблема, и я не могу заставить ее работать должным образом. Я добавляю json данные в таблицу, но она продолжает добавлять каждую строку данных дважды. Я надеюсь, что кто-то здесь увидит, что я могу делать неправильно.

   data = JSON.parse('[{"status":true,"user":{"username":"Chris","avatar":"https:\/\/s3-storage.\/\/avatars\/iiPjqYlVkijUv9XoPt0YUpyHuueBdkFkrTjIwnJd.gif","rep":{"positive":1,"neutral":0,"negative":0},"products":[{"id":"JucpDM8","title":"Non-Full Access(NFA)","image":{"url":"https:\/\/s3-storage.\/\/product_images\/SDcaqvqginNTmVKwYHCDfajoOqc0OqHjq3pMjyAw.png","path":"product_images\/SDcaqvqginNTmVKwYHCDfajoOqc0OqHjq3pMjyAw.png"},"quantity":{"min":25,"max":1000000},"price":0.02,"currency":"USD","stock_warning":500,"type":"account","stock":12},{"id":"qX4vLC2","title":"Unmigrated(UFA)","image":{"url":"https:\/\/s3-storage.\/\/product_images\/F0PaLkMLbWS9gZt7DtRfMNYm2bufv796HTlm4gFe.jpeg","path":"product_images\/F0PaLkMLbWS9gZt7DtRfMNYm2bufv796HTlm4gFe.jpeg"},"quantity":{"max":1000000,"min":1},"price":5.99,"currency":"USD","stock_warning":5,"type":"account","stock":0},{"id":"sYu98Kq","title":"Semi-Full(SFA)","image":{"url":"https:\/\/s3-storage.\/\/product_images\/5mGCAH4Fsj23MlBHw5yw1UoPsw65dGI1ZkmxwNfN.jpeg","path":"product_images\/5mGCAH4Fsj23MlBHw5yw1UoPsw65dGI1ZkmxwNfN.jpeg"},"quantity":{"max":1000000,"min":1},"price":1,"currency":"USD","stock_warning":5,"type":"account","stock":0},{"id":"7efhwnl","title":"Optifine Cape","image":{"url":"https:\/\/s3-storage.\/\/product_images\/W6q61CMgmlzzwtQlk0jXfaXbOcse4YfhrHEIuF0N.jpeg","path":"product_images\/W6q61CMgmlzzwtQlk0jXfaXbOcse4YfhrHEIuF0N.jpeg"},"quantity":{"max":1000000,"min":1},"price":4.99,"currency":"USD","stock_warning":2,"type":"account","stock":0},{"id":"kBkgLAv","title":"Hypixel Ranked(NFA)","image":{"url":"https:\/\/s3-storage.\/\/product_images\/nxvFRT9YcKVuOHPilMGdLM08i7JhYTdd4Aqq0xSK.png","path":"product_images\/nxvFRT9YcKVuOHPilMGdLM08i7JhYTdd4Aqq0xSK.png"},"quantity":{"max":1000000,"min":1},"price":4.99,"currency":"USD","stock_warning":5,"type":"account","stock":0},{"id":"X5kmV3z","title":"Lamm","image":{"url":"https:\/\/s3-storage.\/\/product_images\/rgGnCcqMIqgvsETsVTWjrF2EhVSwIOE5bXNwEtUC.jpeg","path":"product_images\/rgGnCcqMIqgvsETsVTWjrF2EhVSwIOE5bXNwEtUC.jpeg"},"quantity":{"max":1000000,"min":5},"price":0.05,"currency":"USD","stock_warning":0,"type":"account","stock":0},{"id":"AFwEIkN","title":"Lammy","image":{"url":"https:\/\/s3-storage.\/\/product_images\/mUbSzYsq8iII9Ro3wmJkyWRwk4oBVJmDNKavBGr4.png","path":"product_images\/mUbSzYsq8iII9Ro3wmJkyWRwk4oBVJmDNKavBGr4.png"},"quantity":{"max":1000000,"min":1},"price":1,"currency":"USD","stock_warning":0,"type":"account","stock":0},{"id":"JYcUni4","title":"Jess","image":{"url":"https:\/\/s3-storage.\/\/product_images\/GaVbNGASgkv6LCErOjg1zK9MFWlrySvZGUVNCjPb.png","path":"product_images\/GaVbNGASgkv6LCErOjg1zK9MFWlrySvZGUVNCjPb.png"},"quantity":{"max":1000000,"min":5},"price":0.5,"currency":"USD","stock_warning":10,"type":"account","stock":14}],"groups":[{"id":"4TlYivf","title":"Minecraft Is","image":"","unlisted":false,"products":["sYu98Kq","JucpDM8","qX4vLC2","7efhwnl","kBkgLAv"]},{"id":"GTXwlkU","title":"Streaming","image":"","unlisted":false,"products":["JYcUni4","AFwEIkN","X5kmV3z"]}],"feedbacks":[{"updated_at":"2018-09-16 00:29:35","stars":5,"rating":1,"comment":"The best thing in the world! Thanks!","response":"Thank you so much! Come again!","product":null}],"online":{"state":false,"ago":"1 year ago"},"staff":false}},{"status":true,"user":{"username":"bear","avatar":"\/images\/default-avatar.png?id=55b864e42ffc120971da","rep":{"positive":0,"neutral":0,"negative":0},"products":[{"id":"p9YymiV","title":"fortnite","image":null,"quantity":{"min":1,"max":1},"price":75,"currency":"EUR","stock_warning":0,"type":"service","stock":9223372036854775807}],"groups":[],"feedbacks":[],"online":{"state":false,"ago":"1 year ago"},"staff":false}},{"status":true,"user":{"username":"king","avatar":"\/images\/default-avatar.png?id=55b864e42ffc120971da","rep":{"positive":0,"neutral":0,"negative":0},"products":[{"id":"91vFhN4","title":"uplay","image":null,"quantity":{"min":1,"max":1},"price":4,"currency":"EUR","stock_warning":0,"type":"account","stock":0},{"id":"vX5IJ4T","title":"premium","image":null,"quantity":{"min":1,"max":1},"price":2,"currency":"EUR","stock_warning":0,"type":"service","stock":9223372036854775807}],"groups":[],"feedbacks":[],"online":{"state":false,"ago":"1 year ago"},"staff":false}}]');

$.each(data, function(_, v1) {
  $.each(v1.user.products, function(_, v2) {
    $.each(v2.image, function(_, v3) {
      $(".table").append($("<tr>").append(
        $("<img>").css({
          width: 60
        }).attr("src", v2.image.url),
        $("<td>").addClass("Title").text(v2.title),
        $("<td>").addClass("Price").text("$" + v2.price),
        $("<td>").addClass("Stock").text(v2.stock),
        $("<td>").addClass("Link").append(
          $('<a target="_blank">').attr("href", "https://shop.link/product/" + v2.id + "/")
          .text("Buy Now"))
      ));
    });
  });
});
<html>
<title>Test Check</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

<body>
  <div class="table">
    <table>
      <tr>
        <td>Title</td>
        <td>Price</td>
        <td>Stock</td>
        <td>Link</td>
      </tr>
    </table>
  </div>
</body>

</html>

Я предполагаю, что это некоторая ошибка с моим JQuery, а не с html, но я исчерпал все свои варианты, которые мне известны. Я чувствую, что это может быть как-то связано с "table").append($("<tr>").append(. Почти как создание двойного стола. Я попытался очистить таблицу перед запуском сценария добавления с теми же результатами, а также проверить, что все мои теги закрыты должным образом. Мой мозг не должен работать правильно сегодня вечером. Заранее спасибо за любую поддержку.

1 Ответ

1 голос
/ 02 марта 2020

Вы добавляете данные дважды, потому что каждый третий l oop проходит через изображение, имеющее два значения: путь и ссылка. Так что просто не делайте этого, вы все равно никогда не используете v3 из третьего l oop:

$.each(data, function(_, v1) {
  $.each(v1.user.products, function(_, v2) {
    let image = "";
    if (v2.image && v2.image.url) {
      image = v2.image.url;
    }
    $(".table").append($("<tr>").append(
      $("<img>").css({
        width: 60
      }).attr("src", image),
      $("<td>").addClass("Title").text(v2.title),
      $("<td>").addClass("Price").text("$" + v2.price),
      $("<td>").addClass("Stock").text(v2.stock),
      $("<td>").addClass("Link").append(
        $('<a target="_blank">').attr("href", "https://shop.link/product/" + v2.id + "/")
        .text("Buy Now"))
    ));
  });
});

РЕДАКТИРОВАТЬ:

Я добавил logi c для обработки пустого значения изображения. Теперь он показывает все продукты пользователей.

...