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
You need to add a handler for the response returned by the view:
$.ajax({
type:"POST",
url:"/test_results/",
dataType: "json",
success: function(json)
{
//specifying a dataType of json makes jQuery pre-eval the response for us
console.log(json.message);
}
});
You'll probably also want to encode the response as JavaScript in your view:
try:
import json
except ImportError:
import simplejson
def my_view(request):
if request.is_ajax():
return HttpResponse(json.dumps({'message' : 'awesome'},
ensure_ascii=False), mimetype='application/javascript')
Hope that helps you out!
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)
If you're getting a response, you're getting a response. You're just not doing anything with it.
Why not alert the data and append it to the <body>
for example:
$.ajax({
type:"POST",
url:"/test_results/",
data: {
'arbitrary-data': 'this is arbitrary data',
'some-form-field': $("myform input:first").val(), // from form
'background-color': $("body").css("background-color")
// all of this data is submitted via POST to your view.
// in django, request.POST['background-color']
},
success: function(data){
alert(data);
$("body").append(data);
}
});