innerHTML не обновляется?

#javascript #dom #shopify #liquid #shopify-api

Вопрос:

Пытаясь загрузить рекомендации по продукту в HTML, я вижу, что ответ хороший, и я получаю ожидаемые данные, но я не вижу никаких изменений в DOM. Большая часть этого кода была извлечена из документации Shopify, не знаю, в чем проблема. Весь этот код находится внутри файла cart-drawer.liquid

 $( document ).ready(function() {
    var list = document.querySelector(".product-recommendations__list");
    console.log(list)
    // Get the base URL for translated product recommendations
    var baseUrl = list.dataset.baseUrl;
    console.log(baseUrl)
    // Get the product ID to request the product recommendations
    var productId = list.dataset.productId;
    console.log(productId)
    // Create an AJAX request
    var request = new XMLHttpRequest();

    request.open(
      "GET",
      baseUrl   ".json?product_id="   productId   "amp;limit=4"
    );

    request.onload = function() {

      if (request.status === 404 || request.status === 422) {
        return hideRecommendationsSection();
      }

      var products = JSON.parse(request.response).products;

      if (products.length === 0) {
        return hideRecommendationsSection();
      }

      // Append product recommendations to the DOM.
      console.log(products)
      list.innerHTML = products.map(function(product) { return renderProduct(product) }).join("");
      console.log(list.innerHTML)
    };

    request.onerror = function() {
      hideRecommendationsSection();
    };

    // Send AJAX request
    request.send();

    function hideRecommendationsSection() {
      console.log('in hideRecommendations')
      list.style.display = "none";
    }

    function renderProduct(product) {
      return [
        '<div>',
        '<a href="'   product.url   '" class="product__anchor">',
        '<img class="product__img" src="'   product.featured_image   '" alt="'  product.title  '"/>',
        '<p class="product__title">'   product.title   '</p>',
        '<p class="product__price">'   product.price   '</p>',
        '</a>',
        '</div>'
      ].join("");
    }
}) 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div class="product-recommendations__list" data-base-url="{{ routes.product_recommendations_url }}" data-product-id="{{ item.product_id }}"></div> 

Снимок экрана регистрируемых данных, а также внутренний текст элемента сразу после вставки HTML

Снимок экрана элемента

Ответ №1:

Эта переменная списка представляет собой список элементов dom, поэтому попробуйте сначала выполнить цикл, прежде чем изменять dom, попробуйте это, это может помочь

 list.foreEach(domElement=>{
    domElement.innerHTML = products.map(function(product) { return renderProduct(product) }).join("")
 })