javascript - Ajax button initiates every button, not just the one selected -
i create ajax button once clicked, item becomes "purchased" user. once item becomes purchased, button's text updated.
the function works, if clicked every button, not one.
for example, have 2 items purchase. if click "buy" on item 1, both item 1 , item 2 pass through if both bought. how make item 1 bought?
thank in advance!
views.py:
def product_purchase(request): if request.is_ajax() , 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:
{% 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 error.'); } }); });
my apologies everyone. solution value passed in on input. correction change purchased.get_buyers product.get_buyers.
thank though!
Comments
Post a Comment