【问题标题】:How do implement an Ajax partial page refresh within this block of code?如何在这段代码中实现 Ajax 部分页面刷新?
【发布时间】:2021-10-13 11:39:38
【问题描述】:

我正在尝试刷新页面的一部分。更具体地说,它是一个带有“类名”的划分标签。我试图让事情简单明了,以避免混淆。如何将部分页面刷新添加到当前代码块中的单个类?请注意,代码似乎完全符合我的要求。我只需要添加部分页面刷新来完成它,但我不知道该怎么做。

<script type="text/javascript">
$('form').on('submit', function() {
  var that = $(this),
    url = that.attr('action'),
    type = that.attr('method'),
    data = {};
  that.find('[name]').each(function(index, value) {
    //console.log(value);
    var that = $(this),
        name = that.attr('name'),
        value = that.val();

      data[name] = value;
  });

  //console.log(data);
  //now we are using ajax
  $.ajax({
    url: url,
    type: type,
    data: data,
    success: function() {
      //console.log(response);
      //I think I would put the code for a page refresh here???
    }
  });
  return false;
});
</script>

非常感谢您的时间和精力。

【问题讨论】:

    标签: php jquery ajax ajaxform


    【解决方案1】:
    <!--Ajax request with form element-->
    <script type="text/javascript">
    $('form').on('submit', function() {
      var that = $(this),
        url = that.attr('action'),
        type = that.attr('method'),
        data = {};
      that.find('[name]').each(function(index, value) {
        //console.log(value);
        var that = $(this),
            name = that.attr('name'),
            value = that.val();
    
          data[name] = value;
      });
    
      //console.log(data);
      //now we are using ajax
      $.ajax({
        url: url,
        type: type,
        data: data,
        success: function(data) {
          $('#update-whole-cart').load(document.URL + ' #update-whole-cart');//make sure to include space before second id input
          $('.update-whole-cart-added-icon').load(document.URL + ' .update-whole-cart-added-icon');
        }
      });
      return false;
    });
    </script>
    

    问题是我需要过滤掉数据以仅加载包含我需要加载的内容的部分页面。感谢@MikeB 引导我朝着正确的方向前进。对于任何挣扎的人的另一个提示是,您可能需要将您想要的页面部分重新加载到一个单独的类划分中,然后为新的类划分样式,其边距为 0,填充为 0。原因是,如果你一旦 Ajax 请求完成,不要添加新类,我认为它似乎将元素/类移动到其原始位置。我不知道是否有更好的方法来做到这一点,但这对我有用。希望我的意见可以让你头疼。上下文:此代码用于从表单元素中获取输入数据,而无需重新加载整个页面。然后提交数据并且需要重新加载页面的一部分,在这种情况下,购物车小部件和我的添加到购物车图标,只是重新加载。

    【讨论】:

      【解决方案2】:

      由于您似乎在使用 jQuery,因此您需要在成功函数中添加一个参数,例如:

      success: function(data) {
        $(".my-div-class").html(data); // update all divs with this class
       }
      

      这将获取您的页面返回的任何内容(因此请确保它是 HTML)并使用数据更新所有 div 节点 class="my-div-class"。

      如果您在父页面中使用过,您可以使用:

       $("#my-div-class").html(data);
      

      改为。

      【讨论】:

      • 我尝试了您提供的第一个示例,但它似乎使我相信的页面翻了一番。第二行代码刷新了整个页面,然后我必须再次手动刷新它才能看到我的购物车商品计数弹出。非常感谢您抽出宝贵时间回复我真的很感激,但我只想刷新我的购物车图标及其内容
      • 如果您看到双页,那是因为您要发布到的页面正在返回整个页面(效率低下),而不仅仅是您希望在 div 中显示的数据。如果是这种情况,您可以尝试解析页面以提取这些字段。成功:function(data_page) { var data_piece = { 编写代码以查找“.my-div-class”并从 data_page 中提取值}; $(".my-div-class").html(data_piece); // 用这个类更新所有的 div }
      • 例如:您可以使用 data_page.indexOf("my-div-class") 并以这种方式解析。更好的方法是将 data_page 加载到 DOM 对象中,然后您可以使用 jQuery 来提取它。像这样的东西: var doc = new DOMParser().parseFromString(data_page, "text/xml"); data_piece = $(doc).find("#my-div-class")[0].val(); [0] 是因为 find 返回一个数组,所以取第一个。试试看。
      • 对于您作为评论发布的最后一个示例,我仍然有些困惑。我想在 $('form').on('submit', function(){ .... here....} 中声明该变量然后执行与您发布的第一个答案相同的 Ajax 请求?
      • 在向答案添加详细信息之前,您的 $.ajax 调用是返回整个页面,还是仅返回购物车中的商品数量?
      猜你喜欢
      • 1970-01-01
      • 2012-04-18
      • 1970-01-01
      • 2019-12-23
      • 1970-01-01
      • 2018-05-26
      • 1970-01-01
      • 2014-07-14
      • 1970-01-01
      相关资源
      最近更新 更多