当我提出新请求时,Ajax http 请求将以前的图像加载到轮播中

Posted

技术标签:

【中文标题】当我提出新请求时,Ajax http 请求将以前的图像加载到轮播中【英文标题】:Ajax http request loads previouse images into carousal when i make new request 【发布时间】:2020-03-30 18:47:12 【问题描述】:

我正在开发一个使用 javascript 的移动应用程序(PhoneGap with Wordpress Rest API for wooCommerce Multivendor。

我的代码用于收集产品 ID 并将图像加载到轮播中。

问题 当我单击任何产品时,它会加载图像,如果我返回并单击一个新产品,它会加载新产品的图像以及我加载到轮播中的上一个产品的图像。

我从早上起就一直在和它作斗争。任何可以帮助的建议将不胜感激

HTML

<div id="carouselExampleSlidesOnly" class="carousel slide" data-ride="carousel">
                          <div class="carousel-inner">
                            <div class="carousel-item active">
                                <img id="mainImage" src="" class="d-block w-100" >
                            </div>
                        <div id="otherImgagesHere">

                        </div>
                          </div>
                        </div>

JAVASCRIPT

<script>
var tokenDetails = 'xxxxxxxxxxxxxxxxxxxxxxxxwENs';

  function loadDetail(lnk)
    var selProductId = lnk.getAttribute('value');

  var getProductDetails = new XMLHttpRequest();
  getProductDetails.onreadystatechange = function() 
    if (this.readyState == 4 && this.status == 200) 

          var authJsonGetProductDetails = JSON.parse(getProductDetails.responseText);
          document.getElementById('productDetailName').innerhtml = authJsonGetProductDetails.name;
          document.getElementById('productDetailTitle').innerHTML = authJsonGetProductDetails.name;
          document.getElementById('productDetailPrice').innerHTML = authJsonGetProductDetails.price;
          document.getElementById('productDetailShort_description').innerHTML = authJsonGetProductDetails.short_description;


          var mainImageName = authJsonGetProductDetails.images[0].src;
          console.log(mainImageName);

          document.getElementById("mainImage").src = mainImageName;

          var mainImageDisplayCode = '<img src="'+mainImageName+'" class="d-block w-100" >';
           console.log(mainImageDisplayCode);
           document.getElementById('mainImage').innerHTML = mainImageDisplayCode;

         // document.getElementById("mainImage").setAttribute("src", authJsonGetProductDetails.images[0].src); 
          //console.log(authJsonGetProductDetails.images[x].src);

         for(var x=0; x <  authJsonGetProductDetails.images.length; x++) 
           var imageLink = authJsonGetProductDetails.images[x].src;
           var otherImageDisplayCode = '<div  class="carousel-item">'+
                                          '<img src="'+imageLink+'"  >'+
                                        '</div>'; 
          console.log(otherImageDisplayCode);           
           document.getElementById('otherImgagesHere').innerHTML += otherImageDisplayCode;
         


          location.replace("#productDetails");

    
  ;
getProductDetails.open("GET", "<base_url>/wp-json/wcfmmp/v1/products/"+selProductId, true);
getProductDetails.setRequestHeader("Content-Type", "application/json");
getProductDetails.setRequestHeader('Authorization', 'Bearer ' + tokenDetails);
getProductDetails.setRequestHeader('Cache-Control', 'no-cache');
getProductDetails.send();




  

【问题讨论】:

如果有任何截图可能更有意义,根据你所说的。如果您打算只拥有一种产品,您是否会在加载新的轮播之前尝试“清理”您的轮播? 【参考方案1】:

错误的代码行在你添加 HTML 元素的最后的 for 循环中:

document.getElementById('otherImgagesHere').innerHTML += otherImageDisplayCode;

您正在使用 +=,因此它始终会附加到之前的内容。我建议添加

document.getElementById('otherImgagesHere').innerHTML = ""

就在你的 for 循环上方,看看是否有帮助

【讨论】:

以上是关于当我提出新请求时,Ajax http 请求将以前的图像加载到轮播中的主要内容,如果未能解决你的问题,请参考以下文章

通过 HTTPS 的 HTTP Cookie 和 Ajax 请求

react native 中的并行获取请求

请求Ajax成功后刷新表

AJAX

DataTables - 当一个新请求开始时终止 ajax 请求

淘汰赛:Ajax 请求中止