Ajax 按钮启动每个按钮,而不仅仅是选定的按钮
Ajax button initiates every button, not just the one selected
我想创建一个 ajax 按钮,一旦点击,该项目就会被用户 "purchased" 。购买商品后,按钮的文本将更新。
该功能有效,但就好像我点击了每个按钮,而不仅仅是一个按钮。
例如,我有两件商品要购买。如果我在项目 1 上单击 "buy",项目 1 和项目 2 都会通过,就好像它们都是已购买的一样。我如何做到只购买商品 1?
提前致谢!
views.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:
{% for product in products %}
<input class="btn btn-default selector" product="{{ product.pk }}" value="{% if request.user.username in purchased.get_buyers %} Purchased {% else %} {{ product.cost }} points {% endif %}" type="button" />
{% endfor %}
javascript:
$('.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.');
}
});
});
我向大家道歉。解决方案是我在输入中传递的值。更正是将 purchased.get_buyers
更改为 product.get_buyers
。
谢谢大家的帮助!
我想创建一个 ajax 按钮,一旦点击,该项目就会被用户 "purchased" 。购买商品后,按钮的文本将更新。
该功能有效,但就好像我点击了每个按钮,而不仅仅是一个按钮。
例如,我有两件商品要购买。如果我在项目 1 上单击 "buy",项目 1 和项目 2 都会通过,就好像它们都是已购买的一样。我如何做到只购买商品 1?
提前致谢!
views.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:
{% for product in products %}
<input class="btn btn-default selector" product="{{ product.pk }}" value="{% if request.user.username in purchased.get_buyers %} Purchased {% else %} {{ product.cost }} points {% endif %}" type="button" />
{% endfor %}
javascript:
$('.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.');
}
});
});
我向大家道歉。解决方案是我在输入中传递的值。更正是将 purchased.get_buyers
更改为 product.get_buyers
。
谢谢大家的帮助!