Puedo usar jQuery para hacer un AJAX petición POST a mi servidor, que puede devolver respuesta HTTP con el estado 302. A continuación, JavaScript envía petición GET a la URL, aunque me gustaría redirigir usuario a la dirección URL en esta respuesta. Es esto posible?

6 Comentarios

  1. 22

    La aceptada respuesta no trabajo por las razones dadas. He publicado un comentario con un enlace a una pregunta que se describe un hack para eludir el problema de la 302 ser manejado de forma transparente por el navegador:

    Cómo gestionar una solicitud de redirección después de una llamada Ajax de jQuery

    Sin embargo, es un poco de un sucio hack y después de mucho buscar he encontrado lo que creo que es la mejor solución – uso JSON. En este caso, usted puede hacer todas las respuestas a peticiones ajax tiene el código 200 y, en el cuerpo de la respuesta, se debe agregar algún tipo de objeto JSON que su respuesta ajax controlador puede utilizar en la forma apropiada.

    • No mucho aplicable en muchos de los casos [si usted tiene un marco de manejo de la autorización]
    • Yo no creo que sea una buena solución. Si usted tiene muchas de las llamadas ajax, usted no tiene que agregar la lógica de control para cada función de ajax?
    • otra opción es generar un error, pero agregar un encabezado personalizado en la respuesta del servidor que la aplicación puede utilizar para decidir si cambiar la ubicación de la página que inició la llamada ajax independientemente de la Ubicación especifica (o cualquier otra cosa … en mi caso acabo de actualizar la página, ya que estoy tratando de detectar problemas en los que el usuario no ha iniciado sesión, y la actualización de la página permite a mi backend django, el uso es normal «login_required» mecanismo para cerrar la sesión del usuario en un retorno a la página)
    • pero esta es la aceptó contestar o.O
  2. 6

    Yo no lo creo. El W3C dice que HTTP redirecciones con ciertos códigos de estado, incluyendo 302, debe ser seguido de forma transparente. Se cita a continuación:

    Si la respuesta es una redirección HTTP (código de estado 301, 302, 303 o
    307), entonces DEBE ser seguido de forma transparente (a menos que se viole
    de seguridad o bucle infinito precauciones). Cualquier otro error (incluyendo un
    401) DEBE causar que el objeto de utilizar esa página de error como respuesta.

    Como un experimento, he intentado hacer peticiones Ajax desde diferentes navegadores (Firefox 3.5, Chrome, IE8, IE7, IE6) a un servidor de dar un código de estado 302, y mostrando el estado de la petición del navegador de objetos. En cada caso, se mostraba como 200.

  3. 2

    En mi problema razón fue:

    yo estaba usando localhost/Home/Prueba dirección para probar la página. Pero la petición ajax código utilizando 127.0.0.1/Home/AjaxRequest para el parámetro de dirección url. Cuando las direcciones url son diferentes se produce este error.

    tal vez ayuda a alguien 🙂

  4. -1

    Vez de pedir el código de Javascript para Manejar 302, sería mejor regresar en un 500 con el código de error personalizado+ mensaje en caso de 302

  5. -5
    function doAjaxCall() {
       $.ajaxSetup({complete: onRequestCompleted});
       $.get(yourUrl,yourData,yourCallback);
    }
    
    function onRequestCompleted(xhr,textStatus) {
       if (xhr.status == 302) {
          location.href = xhr.getResponseHeader("Location");
       }
    }
    • al menos en este FF no funciona como el controlador completo es llamado con el final de estado HTTP 200 para un exitoso redirect (aunque firebug muestra correctamente la respuesta 302 seguido por el de 200 petición GET).
    • Mismo aquí – no funciona en FF, así como en la Ópera.
    • Echa un vistazo al post stackoverflow.com/questions/199099/…. Esto explica un poco de un hack para obtener todo el navegador automáticamente el manejo de los 302 de respuesta de ajax.
    • Esto no coger respuesta 302.
  6. -9

    La mejor manera de resolver es:

    establecer la variable con un atributo de un objeto, ejemplo

    <html>
    ·
    ·
         <span url="http://www.google.com"></span>
    ·
    ·
    </html>
    
    $('.example').on('click', function(){
         $url = $(this).attr('url');
    
         $.get($url, function(data){ alert(data); })
    })

    Si la dirección se propuso directamente en el js, Usted debe encontrar un error 302, no sé porque razón producirse este error, pero si tienes la url de un atributo, este error no ocurre

Dejar respuesta

Please enter your comment!
Please enter your name here