2010-12-16 15 views
17

sé que no se puede, cuando se utiliza un XMLHttpRequest, interceptar una redirección o prevenirlo, ya que el navegador va a seguir de forma transparente, pero es posible que seaCaptura ubicación para redireccionamiento de JavaScript XMLHttpRequest

A. Determinar si se redirigió una solicitud, o

B. Determine donde se redirigió a? (Suponiendo que la respuesta no da consejos)

Ejemplo de código:

$.post("/my-url-that-redirects/", {}, 
    function(response, statusCode, xmlHttpRequest){ 
     //Somehow grab the location it redirected to 
    } 
); 

En mi caso quemador, primero mostrará un POST a la URL, a continuación, un GET a la URL redirigida. ¿Se puede capturar esa ubicación GET?

+0

Acaba de obtener lo que está en los encabezados de respuesta. – epascarello

+1

xmlHttpRequest.getAllResponseHeaders() no parece dar ninguna indicación de la URL para la que estaba. – Snea

+3

¿Alguien ha encontrado alguna solución en el lado del cliente? Cómo capturar una url de redirección si no tienes el control de un servidor web. –

Respuesta

3

1) utilizan diferentes código de estado de 301 (2 **) (si la solicitud de ajax) y controla la redirección en el lado del cliente:

var STATUS = { 
    REDIRECT: 280 
}; 

$.post('/redirected', {}, function(response, status, request) { 
    if (status == STATUS.REDIRECT) { 
    // you need to return the redirect url 
    location.href = response.redirectUrl; 
    } else { 
    $('#content').html(request.responseText); 
    } 
}); 

2) no redirijan:

uso esa en "redirigir el patrón" = redirigir después de la solicitud (no desea permitir que el usuario actualice la solicitud, etc.)

Con la solicitud ajax, esto no es necesario, por lo que cuando la solicitud es ajax, En lugar de eso, reenvío (solo reenviar a un controlador diferente, depende de su servidor mework, o lo que estás usando ...). Los navegadores no almacenan en caché las solicitudes POST.

En realidad, no sé cuál es la razón por la que lo necesita, por lo que puede que no sea tan útil para usted. Esto es útil cuando el servidor devuelve diferentes respuestas para las peticiones Ajax que las peticiones comunes, porque cuando la solicitud de redireccionamiento del navegador Ajax, la solicitud no es redirigida XMLHttpRequest ...

[actualizada]

Se puede acceder a las cabeceras (de solicitud redirigida) así:

$.post('redirected', {}, function(r, s, req) { 
    req.getAllResponseHeaders(); 
    req.getResponseHeader('Location'); 
}); 

debe haber encabezado 'Localización', pero depende del servidor, que los encabezados se envían de vuelta ...

+0

Lamentablemente, se trata de una publicación que simula un formulario que se rellena, no una API ajax, por lo que no tengo ningún control sobre los códigos de estado enviados desde allí, ni si se redirigen o no. – Snea

+0

Disculpe, no estoy seguro de entender su comentario. ¿Quiere decir que el servidor no está administrado por usted mismo? Entonces, ¿no puedes cambiar el lado del servidor? – Vojta

3

Después de 4 años Ahora es posible encontrar la última ubicación de redirección usando responseURL desde la instancia de XHR en Chrome 42+ (Opera 29+) y Firefox 39+, pero aún no está disponible en IE, Edge o safari.

Cuestiones relacionadas