Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Redirect after POST request with jquery

I'm working with Django. I have an HTML page, where I do some Javascript stuff, and then I do a jQuery post, in this way:

$.ajax({ 
  url: '/xenopatients/measurement/qual', 
  type: 'POST', 
  data: {'obj':data}, 
  dataType: 'json', 
  contentType: "application/json; charset=utf-8", //questo ok 
}); 

After this post request, my Django view correctly handles the call for this URL. What I want it to do is process the data, send the user to another page, and send this data to the new page. The problem is that I cannot perform the redirect like usual in Python, it's like the code ignores the redirect.

My Python code is:

@csrf_protect 
@login_required#(login_url='/xenopatients/login/') 
def qualMeasure(request): 
    name = request.user.username 
    print "enter" 
    if request.method == 'POST': 
        print request.POST 

        if "obj" in request.POST: 
            print 'obj received' 
            return render_to_response('mice/mice_status.html', RequestContext(request)) 

    return render_to_response('measure/qual.html', {'name': name, 'form': QualMeasureForm()}, RequestContext(request)) 

The only way I've found to change the page is through Javascript after the code above:

top.location.href = "/xenopatients/measurement";

But I don't know how to pass the data I need when using this method.

The HTML code:

<form action="" method=""> 
  <table id="dataTable" width="100%" border="1"></table><br> 
  <script language="javascript"> 
    document.measureForm.id_barcode.focus(); 
    document.measureForm.Add.disabled = false; 
    $('#dataTable').tablePagination({}); 
  </script> 
  <input type="button" name="save" value="Save Measure Serie" onclick="table2JSON('dataTable')"/> 
</form> 

P.S. I've also tried $.post, but with the same results.

How can I do a redirect after a post request made with jQuery in Django?

like image 499
Piero Alberto Avatar asked Jul 08 '11 12:07

Piero Alberto


1 Answers

Ok, I've found the magical solution! :)

The situation: there is a view's method called by jQUery.ajax()

To redirect after Ajax, I've used the tips found here (use document instead of 'body' in the jQuery selecotor)

But, I've had also further operations to do.

in the called view, call another method, like this:

[...]
if request.method == 'POST':
    if "obj" in request.POST: #ricevuti dati da ajax
        request.session['qual'] = request.POST['obj']
        return HttpResponseRedirect(reverse("xenopatients.views.qualReport"))

I save the data that I need in the session. I use this data in the called view.

Call another method it's the key for redirect the page of the browser. In fact, at the end of the called method, you can normally write&execute:

return render_to_response('measure/qualReport.html', {'name':name, 'list_report': report, 'message':'Measures correctly saved'}, RequestContext(request))

Hope this can be useful for someone! ;)

like image 111
Piero Alberto Avatar answered Sep 27 '22 23:09

Piero Alberto