2009-12-04 4 views
13

Estoy usando el jQuery ajaxForms plugin para hacer un ajax enviar a mi aplicación CakePHP.X-Solicitado-Con el encabezado no establecido en el plugin jquery ajaxForm

Cake's RequestHandler detecta las solicitudes ajax mirando el encabezado "X-Requested-With", pero el complemento de formularios no parece establecerlo. O jQuery no lo establece cuando usa el complemento.

He intentado varias cosas,

en la principal función onload añadí:

$.ajaxSetup({ 
    headers: {"X-Requested-With":"XMLHttpRequest"} 
}); 

En el código del plugin añadí este derecho antes de la llamada ajax real:

options.beforeSend = function(xhr) { 
    xhr.setRequestHeader("X_REQUESTED_WITH", "XMLHttpRequest"); 
}; 

Hacer una llamada ajax regular, establece el encabezado ...

¿Alguien puede decir m e lo que está pasando o lo más importante, ¿cómo puedo solucionarlo?

+4

jQuery agregará el encabezado X-Requerido-Con XMLHttpRequest en llamadas ajax y el plugin ajaxForms usa la función jquerys ajax para hacer llamadas ajax. La única vez que pude ver que no se enviaba es que si está cargando un archivo con el plugin ajaxForms – PetersenDidIt

+1

, es idd una forma multiparte ... ¿por qué lo hace y puede arreglarse? – NDM

Respuesta

12

@Nicky de Maeyer de a su propia pregunta

en realidad no es necesario hacerlo usted mismo (introducción de un oculto campo de entrada).

yo sepa que sólo puede pasar esos datos a AJAXForms el plugin en las opciones del objeto

$('#myForm1').ajaxForm({data:{"X_REQUESTED_WITH":"XMLHttpRequest"}}); 

caso automágicamente (en el caso oculto carga de archivos iframe) añadir una entrada como a su forma de presentación

<input type="hidden" name="X_REQUESTED_WITH" value="XMLHttpRequest" /> 
+0

Voy a intentarlo :) – NDM

+6

Como un lado no para las personas que usan ASP.NET MVC. MVC distingue entre mayúsculas y minúsculas y no reconocerá el parámetro a menos que el nombre sea "X-Requested-With". – kim3er

2

Yendo desde el comentario de petersendidit, fui a buscar preguntas ajax/file upload.

hay una pregunta interesante en él en SO indicando que no es posible, solo a través de un hack con un iFrame. Así se realiza ninguna llamada ajax real ...

ya que mi forma es una de varias partes con una carga de archivos, el plugin utiliza el iFrametechnique en lugar de la llamada ajax regulares ...

Para resolver esto para saber esto debería parecerse a una llamada AJAX voy a añadir un campo de entrada oculto en los formularios de varios ... respuesta

+0

O simplemente agregue 'xhr.setRequestHeader (" X_REQUESTED_WITH "," XMLHttpRequest ");' –

0

Tuve que lidiar con un problema hoy que fue similar a esto y se me ocurrió una solución diferente. El problema surgió con Chrome, Safari e IE, donde el encabezado (que estaba comprobando en PHP a través de $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') no coincidía.

Como se indicó en una respuesta anterior, cuando se utilizan las funciones jQuery ajax, este encabezado ya estará configurado por jQuery.

En dichos navegadores anteriores, cuando usando:

options.beforeSend = function(xhr) { 
    xhr.setRequestHeader("X_REQUESTED_WITH", "XMLHttpRequest"); 
}; 

Esos navegadores (Firefox) no se anexe a que la cabecera. Así que, en realidad, el encabezado se configuró como: 'XMLHttpRequest, XMLHttpRequest'

En pocas palabras, no configure este encabezado cuando use las funciones de jquery AJAX. Espero que eso resuelva el dolor de cabeza de alguien.

3

promoción:

A partir de ahora, la jquery.form plugin ahora es compatible con varias partes (incluyendo archivo) carga muy bien, de una manera compatible entre navegadores, y establece el X-solicitada-Con cabecera. Estaba teniendo este problema con una versión anterior de jquery.form y la actualización a 3.02 lo solucionó.

0

Encontré que el problema era la falta de soporte para subir archivos en versiones anteriores del complemento. Cuando eliminé las entradas del archivo, el problema desapareció.

Cuestiones relacionadas