2011-01-11 7 views
10

Necesito comprobar si la solicitud es ajax. $request->isXmlHttpRequest() funciona bien, sin embargo, si hay un redireccionamiento en algún lugar durante la ejecución, este método devolverá falso. ¿De qué otra manera puedo verificar si la solicitud es ajax en este caso? p.s. ajax es iniciado por jQuery

Respuesta

8

Si no está redireccionando a una aplicación diferente en su proyecto u otra uri externa simplemente use reenviar si isXmlHttpRequest es verdadero en la primera solicitud.


bien que método comprueba contra el valor de la cabecera X-Requested-with y en algunas implementaciones del navegador que encabezado (o todos los encabezados originales) son descartados/sobrescrita desde la solicitud redirigida (FF por nombrar uno).

Como solución alternativa, puede usar una variable en la solicitud. Es posible que pueda utilizar la infraestructura existente sf_format, pero no estoy seguro de si eso funcionaría porque no estoy familiarizado con la forma en que funciona internamente.

+0

Exactamente, Firefox es el culpable. Probado de la misma manera en Opera, funciona bien. – Dziamid

+0

@Dziamid: Sí, se ha producido un error, pero se perdió el lanzamiento de FF4, por lo que va a ser al menos 4.1 antes de que se solucione. Además, puede haber otros navegadores donde esto ocurra, aunque no estoy al tanto de ningún otro. Así que lo jugaría conservador con su solución. De hecho, si es posible, podría eliminar la redirección de la ecuación, si es posible. – prodigitalson

+0

Prohibiré mi cabeza, pero fue en vano. Obviamente, establecer un parámetro de solicitud personalizado para un objeto de solicitud no ayuda; están claros en una redirección. Usar sf_format es una forma complicada (porque Symfony buscará diferentes plantillas, como indexSuccess.sf_format.php). – Dziamid

2

Si necesita una solución fácil, sugeriría

usar una URL como http://mywebsite.com/loadsomething.php?ajax=true y

$isAjax = $request->getParameter('ajax'); 

O, si envías puede crear un campo oculto llamado "Ajax". Por supuesto, esto no resolverá su problema para siempre, pero funcionará como una solución rápida si lo necesita lo antes posible.

Si desea admitir solo una redirección, también puede crear una variable de flash.

De lo contrario se puede ver en el código fuente de Symfony:

http://trac.symfony-project.org/browser/branches/1.4/lib/request/sfWebRequest.class.php 

En la línea 518 se puede ver el objeto de la petición identifica la petición de ser ajax de las cabeceras HTTP. Por lo tanto, debe descubrir que después de la redirección, los mismos encabezados HTTP no están configurados correctamente.

+0

porque son limpiados por tres navegadores, como @prodigitalson (ver otra respuesta). El problema no tiene nada que ver con Symfony. – Dziamid

+0

No, no dije que tenga nada que ver con Symfony. Solo dije dónde comenzaría a perseguir el problema. – Aston

6

Algunas bibliotecas js no envía el valor XmlHttpRequest en las cabeceras, juste añadir este en el script:

xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");