2010-07-08 21 views
11

Entonces, tengo esta solicitud de ajax, consulte-. Rubio, cerca de 6 pies de alto, tiene el siguiente aspecto:Averigüe dónde se redirige la solicitud de Jquery ajax al

$.ajax({ 
    url: 'http://example.com/makeThing', 
    dataType: 'html', 
    type: 'POST', 
    data: { 
     something:someotherthing 
    }, 
    complete: function(request, status) { 
     console.log("headers=" + request.getAllResponseHeaders();); 
    } 
}); 

Lo que pasa es que la solicitud de '/ makeThing' devuelve un redireccionamiento 302 a una segunda url: 'getThing/abc123'. Todo lo que quiero hacer es descubrir qué es esa segunda url (programáticamente, será diferente cada vez, así que simplemente el check in firebug no me ayuda). He intentado sondear los encabezados de respuesta que regresan a la devolución de llamada "completa", pero eso solo me da lo que me llegó en la segunda solicitud.

Restricciones: -No tengo control sobre el servidor en el que se está ejecutando, solo el js. -Puede cambiar los marcos si tengo que (¿prototipo de dojo?)

Idealmente, haría algún tipo de solicitud solo de encabezado a/makeThing para averiguar cuál es la URL de redirección obteniendo solo los encabezados de la respuesta inicial 302.

En su defecto (ya que jquery auto-sigue los redireccionamientos y parece que no hay forma de interponerse entre las solicitudes), obtengo la respuesta final y la utilizo para obtener de algún modo la URL de ... ¿algo? El objeto de solicitud, tal vez?

TLDR: Enviando una solicitud de AJAX. Framework auto-sigue la redirección resultante 302. ¿Cómo averiguo a dónde se redirigió?

EDITAR, Aclaración: la URL final será diferente cada llamada tiempo- 'makeThing' hace que el servidor para crear a partir de entonces lo que está alojado en 'getThing/abc123'

+0

Compruébelo con Firebug. –

Respuesta

0

¿Por qué no sólo tiene que conectar la URL 'http://example.com/makeThing' en su navegador y vea dónde termina?

+0

La redirección puede depender de los datos, es decir, si es válida,> redirigir a la página siguiente. Si no es válido -> redirigir a la página de edición. También podría actuar de manera diferente si se trata de un XHR en lugar de una solicitud regular. Esto no es raro en Rails, por ejemplo. –

+0

Como mencioné en mi corrección, la url final será muy importante en cada solicitud para makeThing. makeThing genera una 'cosa' con id 'abc123' que luego es accesible en getThing/abc123. De ahí por qué necesito acceder a la cosa programáticamente. – Fishtoaster

0

Si inicia firebug, abra la consola, puede seguir hacia donde va realmente la solicitud. Cuando vea que la solicitud AJAX ha terminado de procesarse, expanda ese elemento de la consola y verá las solicitudes involucradas y los encabezados de respuesta.

+0

Disculpe si no estuve especialmente claro en este punto: makeThing es una función de generador, a la que redirige es diferente cada vez que se invoca, por lo que necesito una forma de hacerlo mediante programación. – Fishtoaster

4

Si es posible, se han fijado su servidor de cabeza en esas páginas (las páginas de destino, no a la reorientación de uno), por ejemplo, establecer una cabecera "current-location", entonces usted puede hacer esto:

$.ajax({ 
    url: 'http://example.com/makeThing', 
    dataType: 'html', 
    type: 'POST', 
    data: { 
     something:someotherthing 
    }, 
    complete: function(request, status) { 
     var location = request.getResponseHeader("current-location"); 
    } 
}); 

Sí, esto es un poco hacky, pero como la redirección se maneja internamente en el objeto XmlHttpRequest (un evento al que no se puede acceder), no tiene muchas opciones.

You can check the spec, este es el destinados comportamiento de XmlHttpRequest:

Si el origen de la URL transmitida por la cabecera ubicación es mismo origen con el origen XMLHttpRequest y la redirección no viola las precauciones bucle infinito, siga de forma transparente la redirección mientras observa las reglas de evento de solicitud de origen idéntico.

+1

Eso funcionaría si tuviera acceso al servidor. :(Todo lo que puedo cambiar es Javascript. – Fishtoaster

+2

@Fishtoaster - AFAIK, Entonces no tienes ninguna opción, esto simplemente no está expuesto, al menos en todos los navegadores. ¿Puedes leer el contenido para averiguar en qué página estás? en, o algún enfoque alternativo? –

+0

Eso es probablemente lo que voy a tener que hacer. Frágil, pero supongo que eso es todo lo que hay. – Fishtoaster

2

Esto puede no ayudar a su situación particular, pero cuando tuve el mismo problema me di cuenta de la página que terminó después de la redirección tenía una pista en el código HTML:

<meta property="og:url" content="THE_URL_OF_THE_PAGE" /> 

Algunas páginas tienen guión fragmentos en ellos utilizados para agregar comentarios de Facebook, y que a veces pueden contener la URL actual también. O incluso como descaradamente como esto:

<a href="http://www.facebook.com/sharer.php?u=THE_URL_OF_THE_PAGE"> 
0

Eso sí que es una lástima que no podemos tomar esa cabecera ... pero como señaló Magnus, usted podría tratar de leer algo de contenido exclusivo de esa página que le permitirá usted determina qué página fue realmente enrutada a usted ...

Cuestiones relacionadas