I put together a simple test of an ajax/jquery post within a django framework, but don't really understand why the output doesn't make it to a template page. Anyone?
I can see the contents of the post in firebug's 'response' tab, but whether I try to return a template or a simple message, nothing happens in the browser itself. Conversely, a non-ajax post works as expected (loads new page, posts message)
I'm a complete newbie to ajax/jquery/django so please excuse my ignorance :)
Eventually, what I'd like to be able to do is to pass arbitrary, non-form variables to a django view via jquery. Possible? Thank you :)
Here's the code --
test.html:
<html> <head> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script></javascript> <script type="text/javascript"> $(document).ready(function() { $("#testForm").submit(function(event){ event.preventDefault(); $.ajax({ type:"POST", url:"/test_results/" }); }); return false; }); </script> </head> <body> <form id="testForm" action="/test_results/" method="post"> <input type="submit" id="go" name="go" value="Go!"> </form> </body> </html> views.py:
from django.shortcuts import render_to_response from django.http import HttpResponse def test_ajax(request): if request.is_ajax(): message = "Yes, AJAX!" else: message = "Not Ajax" return HttpResponse(message) #alternative test: return render_to_response('test_results.html') urls.py:
(r'^test_results/$', views.test_ajax), (r'^test/$', views.test), and the almost empty test_results.html:
<html> <head> </head> <body> test results </body> </html>
return falseis at the wrong level; it should be within the$("#testForm").submitblock, ie one line higher so it's before the closing});for that block.