将产品添加到购物车 AJAX / Django 后更新购物车数量而不刷新页面?

时间:2021-03-30 00:48:31

标签: javascript python django ajax

产品已成功加入购物车,但购物车价值不是最新的。我将不得不刷新页面,以便 div 是最新的。我尝试了 load() 和 html() 方法,但什么都会发生。 将产品添加到购物车时如何刷新购物车容器? 我需要帮助。

查看 Django

def add_cart(request, product_id):
    cart = Cart(request)
    product = get_object_or_404(Product, id=product_id)

    form = CartProductForm(request.POST)
       
    if form.is_valid():
        cd = form.cleaned_data
        cart.add(product=product,
                quantity=cd['quantity'],
                update_quantity=cd['update_qt']
                )
                
    return JsonResponse({'status': 'success'}) 

表格

from django import forms
from django.core.validators import MinValueValidator, MaxValueValidator

class CartProductForm(forms.Form):
    quantity = forms.IntegerField(initial=1)
    update_qt = forms.BooleanField(required=False, initial=False, widget=forms.HiddenInput)

HTML 表单代码

<form action="{% url "..." %}"  method="post" data-id="{{ ... }}" class="form-order" id="form">
    {{ cart_product_form }}
    {% csrf_token %}
    <a data-id="{{ ... }}" class="buy-product"><button>BUY</button></a>
</form>

HTML Span

<ul class="navbar-nav ml-auto d-block d-md-none">
      <li class="nav-item">
        <a class="btn btn-link" href="#"><i class="bx bxs-cart icon-single"></i> <span class="badge badge-danger" id="cartval">{{ cart | length }}</span></a>
      </li>
</ul>

JS 代码

        $(".form-order").on('submit', function(e){
            e.preventDefault();
            var product_id = $(this).attr('data-id')
            var quantity = $(this).find("#id_quantite").val()
            console.log(product_id)
            console.log(quantity)

            data = {
                'product_id': product_id,
                'quantity': quantity
            }
            var point='/cart/add/'+product_id+'/'
            
            $.ajax({
                headers:{
                'Content-Type':'application/json',
                'X-CSRFToken':csrftoken,
                },
                url: point,
                type: 'POST',
                dataType: 'json',
                data: data,

                success: function(data){
                    $("cartval").load();
                    $("#cartval").load(location.href + " #cartval");
                    
                }
        })
    })


0 个答案:

没有答案