Reputation: 11
I have a problem,Django my ajax post is not working. when i look at the console quantity is not undefined. But my request.post is not working.
<form method="POST">
{% csrf_token %}
<ul>
<li>
<div class="form-group quantity-box">
<label class="control-label">Quantity</label>
<input
class="form-control"
id="quantity"
value="0"
min="0"
max="20"
type="number"
/>
</div>
</li>
</ul>
<div class="price-box-bar">
<div class="cart-and-bay-btn">
<a class="btn hvr-hover" data-fancybox-close="" href="#"
>Buy New</a>
<button type = "submit">
<a class="btn hvr-hover" data-fancybox-close="" id= "qtyButton" data-fancybox-close="" href="{% url 'addCart' %}">Add to cart</a>
</button>
</form>
my js script
$('#qtyButton').click(function(e){
e.preventDefault();
var qty = $('#quantity').val();
var id = {{product.id}};
$.ajax({
type: "POST",
url: "{% url 'addCart' %}",
dataType: 'json',
data: {
"quantity":qty,
"product_id":{{product.id}},
}
});
});
my view.py file
def addCart(request):
if request.method == 'POST':
post = request.POST
quantity = post.get('quantity')
id = post.get('product_id')
item = Product.objects.get(id=id)
Cart.objects.get_or_create(user_id=request.user, product_id=item, quantity=quantity)
else:
return render(request, 'cart.html')
return redirect(request.META.get("HTTP_REFERER", "/"))
I tried so many things. But none of them is working. What should i do ?
Upvotes: 1
Views: 30
Reputation: 3635
You need to pass Jsonresponse()
response instead of render()
response like this
from django.http import JsonResponse
def CreditSaveView(request):
if request.method == 'POST':
creditform = CreditForm(request.POST)
if creditform.is_valid():
amt = request.POST['amt']
tag = request.POST['tag']
crs = request.POST['csrfmiddlewaretoken']
CreditModel(amt=amt,tag=tag).save()
return JsonResponse({'status':'done'}
<script>
document.getElementById("creditbtn").addEventListener("click", function () {
let id_amt = document.getElementById('id_amt').value;
let id_tag = document.getElementById('id_tag').value;
let crs = document.getElementsByName('csrfmiddlewaretoken')[0].value
my_data = { csrfmiddlewaretoken: crs, amt: id_amt, tag: id_tag };
console.log(my_data)
$.ajax({
url: "/creditsave/",
method: "POST",
data: my_data,
// dataType: "json",
success: function (data) {
if (data.status == 'done') {
// document.getElementById('creditform').reset()
console.log(data)
document.getElementsByTagName('form')[1].reset()
}
}
});
});
</script>
Upvotes: 1