I am trying to POST data using jQuery/AJAX in Django and am having trouble. When I run the code below and click on the 'test' button, the entire page re-loads again, which isn't what I want to happen (that's why I'm using AJAX).
I'm also not able to confirm the AJAX request is getting to the Django view.
EDIT: I've made the edits for return false and event.preventDefault()
. A new page doesn't load, but I'm still not able to see the updated text in the <div id='message'>
field. I'm not sure if the data is getting sent. I'm seeing in the console:
POST /edit_favorites/ HTTP/1.1" 403 2294
views.py:
from django.shortcuts import render_to_response
from django.http import HttpResponse
def edit_favorites(request):
if request.is_ajax():
message = "Yes, AJAX!"
else:
message = "Not Ajax"
return HttpResponse(message)
urls.py:
url(r'^edit_favorites/', 'edit_favorites'),
HTML:
<form method='post' id='test'>
<input type="hidden" value="video34"/>
<input type='submit' value='Test button'/>
<div id='message'>Initial text</div>
</form>
JavaScript:
$(document).ready(function () {
$("#test").submit(function (event) {
event.preventDefault();
$.ajax({
type: "POST",
url: "/edit_favorites/",
data: {
'video': $('#test').val() // from form
},
success: function () {
$('#message').html("<h2>Contact Form Submitted!</h2>")
}
});
return false;
});
});
Any advice?
Using Ajax in Django can be done by directly using an Ajax library like JQuery or others. Let's say you want to use JQuery, then you need to download and serve the library on your server through Apache or others. Then use it in your template, just like you might do while developing any Ajax-based application.
jQuery provides several methods for AJAX functionality. With the jQuery AJAX methods, you can request text, HTML, XML, or JSON from a remote server using both HTTP Get and HTTP Post - And you can load the external data directly into the selected HTML elements of your web page!
Inside your settings.py file make sure that django. contrib. staticfiles is under INSTALLED_APPS (it is there by default). And now you can use jQuery throughout your site!
Misplaced return false;
. It should be at the end of .submit()
function. So move it one line upwards:
$(document).ready(function () {
$("#test").submit(function (event) {
$.ajax({
type: "POST",
url: "/edit_favorites/",
data: {
'video': $('#test').val() // from form
},
success: function () {
$('#message').html("<h2>Contact Form Submitted!</h2>")
}
});
return false; //<---- move it here
});
});
UPDATE:
About the issue POST /edit_favorites/ HTTP/1.1" 403 2294
. Check on this post which looks similar to your issue:
the following methods worked to me. and i hope help you too.
from django.views.decorators.csrf import csrf_exempt
from django.http import HttpResponse
@csrf_exempt
def edit_favorites(request):
if request.is_ajax():
message = "Yes, AJAX!"
else:
message = "Not Ajax"
return HttpResponse(message)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With