【问题标题】:Laravel - Ajax and preventdefaultLaravel - Ajax 和 preventdefault
【发布时间】:2019-06-15 15:48:42
【问题描述】:

我在将商品放入购物车时遇到问题,在我将商品添加到购物车后,Ajax 运行良好,然后当我尝试从列表中删除它时,如果我重新加载页面,它第一次无法使用 Ajax它会起作用的。

Ajax 生成这样的响应:

1x ItemTitle X(移除)

当 remove 有 /delete-from-cart/id/place_id 时

它只在我重新加载页面时有效,而且我还有一个优惠券按钮,它也可以与 Ajax 一起使用,但它只在刷新后有效。

$('.deletefromcart a').each(function(){
    $('#'+this.id).on('click',function(e) {
      e.preventDefault();
      var id = $(this).attr('data-del');
      var url = $(this).attr('href');
      var place = $(this).attr('data-place');
       $.ajaxSetup({
          headers: {
              'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
          }
      });
      $.ajax({
         url: '/delete-from-cart/'+id+'/'+place+'',
         method: 'get',
         data: $(this).serialize(),
         success: function(data){
           toastr.warning('Uspešno ste obrisali iz korpe!', 'Korpa');
             $(".korpa").load(location.href + " #cartAll");
         },
         error: function(data){
           console.log(data);
         }

         });
     });
});

似乎这个函数在我添加到购物车后找不到任何从 ajax 运行它的对象,刷新后它找到了。

如果您需要实时预览,我可以为您注册一个帐户。

【问题讨论】:

  • $('#' + this.id) 指的是什么?
  • 这是元素:<a href="http://klopa.naprviklik.com/delete-from-cart/0/2" class="btn btn-danger btn-round" data-place="2" data-del="0" id="delete-0" role="button">x</a>
  • $(this) 将引用元素本身
  • 不需要每个,因为它会一次触发一个,所以如果你编写没有每个的点击函数并尝试它可能会工作
  • 方法不应该是post吗?

标签: ajax laravel


【解决方案1】:

您应该将每个“删除”元素上的点击事件处理程序绑定为,

$('body').on('click', '.deletefromcart a', function (e) {
    e.preventDefault();
    var id = $(this).attr('data-del');
    var url = $(this).attr('href');
    var place = $(this).attr('data-place');

    $.ajax({
        url: '/delete-from-cart/' + id + '/' + place + '',
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        },
        method: 'get',
        data: $(this).serialize(),
        success: function (data) {
            toastr.warning('Uspešno ste obrisali iz korpe!', 'Korpa');
            $(".korpa").load(location.href + " #cartAll");
        },
        error: function (data) {
            console.log(data);
        }
    });
});

注意 1:您的绑定方法会将事件处理程序附加到所有 .deletefromcart a 元素。但是我建议将事件处理程序绑定到一个元素body。这也适用于动态添加的 .deletefromcart a 元素。

注意 2:您也可以像上面一样包含标题值。

【讨论】:

  • 你的方法就像一个魅力,但有一个延迟,它可能需要 4-5 秒才能真正从购物车中删除。但我会保持这种方式,非常感谢您的解释。上帝保佑你!
猜你喜欢
  • 2019-07-17
  • 2014-12-12
  • 2013-12-19
  • 1970-01-01
  • 2015-06-02
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
相关资源
最近更新 更多