2011-07-08 45 views
6

Estoy trabajando con Django. Tengo una página HTML, donde hago un poco de materia Javascript, y luego hago un post jQuery, de esta manera:Redirigir después de la solicitud POST con jquery

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

Después de esta solicitud posterior, mi vista de Django usa bien la convocatoria de esta URL. Lo que quiero que haga es procesar los datos, enviar al usuario a otra página y enviar estos datos a la nueva página. El problema es que no puedo realizar el redireccionamiento como de costumbre en Python, es como si el código ignorase la redirección.

código

Mi Python es:

@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)) 

La única forma que he encontrado para cambiar la página es a través de Javascript después de que el código anterior:

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

Pero no sé cómo pasar los datos que necesito al usar este método.

El código HTML:

<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. También probé $.post, pero con los mismos resultados.

¿Cómo puedo hacer un redireccionamiento después de una solicitud realizada con jQuery en Django?

+0

Si quiere redirigir, ¿por qué lo hace con Ajax? ¿Por qué no enviar el formulario de la forma habitual? La razón principal para usar Ajax es evitar las redirecciones. –

+0

Uso ajax para cambiar dinámicamente los datos de la página y enviar datos complejos al servidor ... ¡y no soy el único! ;) –

+1

El código python no es muy legible, porque algo está mal con la identación ... – acidjunk

Respuesta

8

Ok, he encontrado la mágica ¡solución! :)

La situación: hay un método de una vista llamada por jQUery.ajax()

Para redirigir después de Ajax, he utilizado los consejos encontrados here (documento de uso en lugar de 'cuerpo' en el jQuery selectora)

Pero, también he tenido otras operaciones por hacer.

en la vista de llamada, llamar a otro método, como esto:

[...] 
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")) 

puedo guardar los datos que necesito en la sesión. Yo uso esta información en la vista llamada.

Llamar a otro método es la clave para redirigir la página del navegador. De hecho, al final del método llamado, normalmente se puede escribir & ejecutar:

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

Hope esto puede ser útil para alguien! ;)

1

@ Daniel es correcto en que se quiere evitar las redirecciones con llamadas ajax, pero es posible echar un vistazo a esta pregunta desbordamiento de pila que se ocupa de cómo hacerlo: How to manage a redirect request after a jQuery Ajax call

+0

esto es como mi solución, creo ... en su enlace no encuentro información útil para mí ... ¡no hay información sobre envío de datos en publicaciones vía js o redirección a través de python después de la publicación! :( –

1

El botón de clic llamar a esta función() a continuación y pasar el parámetro, en mi caso, pasé nueva

function checkforNew(){ 
       //jQuery.post('<%=request.getContextPath()%>/InspectionController?&oper=new'); 

       jQuery.ajax({ 
        type: "POST", 
        url: '<%=request.getContextPath()%>/MyController?&oper=new', 
        //data: {'obj':data}, 
        dataType: "json", 
        success: function(response){ 
         window.location.href = response.redirect; 
        } 
       }); 
      } 

Dentro de su servlet es necesario mencionar el siguiente código, para que la página de redirección.

String destination = "/mypage.jsp; 

       response.setContentType("application/json"); 
       JSONObject responsedata = new JSONObject(); 
       responsedata.put("redirect", destination); 

       out.print(responsedata); 
       out.flush(); 
+0

encontró que no funciona, pero funciona con una función de devolución de llamada después de ajax – Sinux

Cuestiones relacionadas