为什么ajax第一次无法与JsonResponse Django / Ajax一起使用

时间:2019-05-06 17:22:52

标签: ajax django

我将产品添加到购物车中,并使用带有product.id的按钮。尝试在没有刷新页面的情况下添加到购物车中,并且此代码在第一次运行时无法正常工作,但需要刷新,刷新后可以正常工作。

<a href="javascript:void(0);" class="add_to_cart" data-id="{{ product.id }}"><button>Add in the cart</button></a>

这是我的网址

url(r'^cart/create/$', views.cart_create, name='cart_create'),

我的方法返回JsonResponse,购物车长度和总价

def cart_create(request):
    cart = Cart(request)
    product_id = request.GET.get('product_id')
    product = Product.objects.get(id=product_id)
    cart.add(product=product)

    return JsonResponse({'cart_length':cart.get_length(), 'cart_total':cart.get_total_price()})

Ajax可以正常工作,但是在添加第一个产品后不是第一次(需要刷新页面),它可以正常工作而无需刷新

$(document).ready(function(){
    $(".add_to_cart").click(function(){
        product_id = $(this).attr("data-id")
        data = {
            product_id: product_id,
        },

        $.ajax({
            type: "GET",
            url: '{% url "cart:cart_create" %}',
            data: data,
            success: function(data){
                $(".cart_count").html(data.cart_length + " товаров " + data.cart_total + " &#8381;")
            },
        });
    });
});

标题

{% if cart|length > 0 %}
    Our cart:

    <a href="{% url 'cart:cart_show' %}" class="cart_count">
        {{ cart.get_length }} products {{ cart.get_total_price }}
    </a>
{% else %}
    <a href="{% url 'cart:cart_show' %}">Cart empty</a>
{% endif %}
Server return "GET /cart/create/?product_id=1 HTTP/1.1" 200 after click.

这是可行的,但第一次未在标题中显示。 请帮我

我意识到,如果我将{% if cart|length > 0 %}{% else %}{% endif %}的代码块移除并仅保留{{ cart.get_length }} products {{ cart.get_total_price }} &#8381;,它将起作用

0 个答案:

没有答案