Javascript Ajax按钮启动每个按钮,而不仅仅是选定的按钮
我想创建一个ajax按钮,一旦单击,该项目就会被用户“购买”。一旦物品被购买,按钮的文本将被更新 该功能可以正常工作,但就好像我单击了每个按钮,而不仅仅是一个 例如,我有两件东西要买。如果我在项目1上单击“购买”,则项目1和项目2都会通过,就好像它们都是购买的一样。我怎样才能做到只购买第1项 提前谢谢你 视图。py: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
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.');
}
});
});