type form example data con and json ajax internet-explorer multipartform-data jqueryform

json - example - multipart form data con ajax



IE intenta descargar la respuesta json al enviar jQuery datos de formulario multiparte que contienen el archivo (9)

Eliminar ContentType del servidor funciona para mí.

Estoy tratando de enviar un formulario con un campo de file a través del complemento jQuery.Form, aquí está el código:

$(''form'').ajaxSubmit({ url: "/path", dataType: "json", contentType: "multipart/form-data" ...

El servidor luego devuelve json como respuesta. Funciona muy bien en todos los navegadores excepto IE, que intenta descargar la respuesta como un archivo. Si elimino el campo de archivo del formulario, también funciona bien.

He visto varias soluciones aquí y en Google, y básicamente intenté casi todo lo que se describe, incluida la configuración de enctype para el formulario a través de jQuery, pero no funcionó.

Cualquier sugerencia sería muy bienvenida.



La misma situación que ustedes: el problema solo ocurre con el enctype="multipart/form-data" usado con la función $(form).ajaxSubmit(...) .

Mi equipo y yo tuvimos que reemplazar (en esta función) dataType: ''json'' opción dataType: ''json'' con dataType: ''text'' y agregar responseText = $.parseJSON(responseText); para forzar el análisis de respuesta del servidor.

Por supuesto, también tuvimos que dar un paso al lado del servidor para devolver una respuesta con "text/plain" encabezado "text/plain" lugar de "application/json"

No estamos orgullosos de ello :( IE definitivamente está matando todo ...

No probé el consejo dado por zmonteca (ya pasé demasiado tiempo en él) pero parece digno: avísennos si estuvo bien para usted.

¡Espero eso ayude!


No he encontrado una solución directa a esto, pero finalmente implementé la siguiente solución alternativa: utilicé dataType: "text" en mi configuración de ajax y luego devolví texto sin formato del controlador, separando los valores con ; y analizarlos en el lado del cliente . De esa forma, IE y Forefox dejaron de intentar descargar una respuesta.

No encontré ninguna otra forma de evitar dicho comportamiento, salvo el de devolver el texto sin formato. Intenté devolver JSON como texto sin formato y luego analizarlo con $ .parseJSON, pero no funcionó debido a algunos errores js.


Se me ocurrió la siguiente solución alternativa (en Zend Framework):

if (!$this->_request->isXmlHttpRequest()) { die(''<textarea>''.Zend_Json::encode($data).''</textarea>''); } $this->view->assign($data);


Simplemente envíe una respuesta con ''Content-Type'', ''text/html'' .


Simplemente puede devolver JSON desde el controlador como "texto / html" y luego analizarlo en el lado del cliente usando JQuery.parseJSON ().

Controlador:

return this.Json( new { prop1 = 5, prop2 = 10 }, "text/html");

Lado del cliente:

jsonResponse = $.parseJSON(response); if(jsonResponse.prop1==5) { ... }

Esta solución ha estado trabajando para mí.


Solo configura Content-Type: text/html

Esto sucede porque IE8 no reconoce la application/... mimetype. Esto funciona para mí

Espero eso ayude.


si trabajas con Zend puedes hacer

$this->getResponse()->setHeader(''Content-Type'', ''text/html'');

en su acción de controlador. y en el lado del cliente, en el caso de jQuery, puede hacer

data = $.parseJSON(data);