Javascript Ajax按钮启动每个按钮,而不仅仅是选定的按钮

Javascript Ajax按钮启动每个按钮,而不仅仅是选定的按钮,javascript,jquery,ajax,django,django-views,Javascript,Jquery,Ajax,Django,Django Views,我想创建一个ajax按钮,一旦单击,该项目就会被用户“购买”。一旦物品被购买,按钮的文本将被更新 该功能可以正常工作,但就好像我单击了每个按钮,而不仅仅是一个 例如,我有两件东西要买。如果我在项目1上单击“购买”,则项目1和项目2都会通过,就好像它们都是购买的一样。我怎样才能做到只购买第1项 提前谢谢你 视图。py: def product_purchase(request): if request.is_ajax() and request.POST: user = r

我想创建一个ajax按钮,一旦单击,该项目就会被用户“购买”。一旦物品被购买,按钮的文本将被更新

该功能可以正常工作,但就好像我单击了每个按钮,而不仅仅是一个

例如,我有两件东西要买。如果我在项目1上单击“购买”,则项目1和项目2都会通过,就好像它们都是购买的一样。我怎样才能做到只购买第1项

提前谢谢你

视图。py:

def product_purchase(request):
    if request.is_ajax() and request.POST:
        user = request.user
        product_pk = request.POST.get('product_pk', False)
        product = get_object_or_404(Product, pk=product_pk)

        purchased, created = Product.objects.get_or_create(pk=product_pk)

        try:
            user_purchased = Product.objects.get(pk=product_pk, buyers=user)
        except:
            user_purchased = None

        if user_purchased:
            purchased.buyers.remove(user)
            purchased.save()
            user_has_purchased = False
        else:
            purchased.buyers.add(user)
            purchased.save()
            user_has_purchased = True

        data = {
            "user_has_purchased": user_has_purchased,
        }
        new_data = json.dumps(data)
        return HttpResponse(new_data, content_type='application/json')
    else:
        raise Http404
html:

def product_purchase(request):
    if request.is_ajax() and request.POST:
        user = request.user
        product_pk = request.POST.get('product_pk', False)
        product = get_object_or_404(Product, pk=product_pk)

        purchased, created = Product.objects.get_or_create(pk=product_pk)

        try:
            user_purchased = Product.objects.get(pk=product_pk, buyers=user)
        except:
            user_purchased = None

        if user_purchased:
            purchased.buyers.remove(user)
            purchased.save()
            user_has_purchased = False
        else:
            purchased.buyers.add(user)
            purchased.save()
            user_has_purchased = True

        data = {
            "user_has_purchased": user_has_purchased,
        }
        new_data = json.dumps(data)
        return HttpResponse(new_data, content_type='application/json')
    else:
        raise Http404

我向大家道歉。解决方案是我在输入时传入的值。更正是将购买的
get\u买家
更改为
product.get\u买家


谢谢大家的帮助

为什么要使用
get\u object\u或\u 404
然后使用
get\u或\u create
?尝试
e.target
instead@Gocht对于
get\u object\u或\u 404
,对象必须存在。对于
get\u或\u create
,购买不一定存在。这就是我在那个例子中测试的目的。@JAG不幸的是,这不起作用。同样的事情还在发生然后
selector.value=“购买”
$('.selector').click(function(e){
    e.preventDefault();
    var $selector = $(e.currentTarget);
    $.ajax({
        type: "POST",
        url: "{% url 'product_purchase' %}",
        data: {
            "product_pk": $(this).attr("product"),
            csrfmiddlewaretoken: "{{ csrf_token }}",
        },
        dataType: "json",
        success: function(data) {
            if (data.user_has_purchased) {
                $selector.val("Purchased");
            } else {
                $selector.val("{{ product.cost }} points");
                }
        },
        error: function (rs, e) {
            alert('Sorry, there was an error.');
        }
    });
});