2012-04-12 23 views
14

Estoy usando el complemento Blueimp Jquery File Upload para cargar archivos de forma asincrónica. Funciona bien en la mayoría de los otros navegadores (con algunos problemas menores) - en IE, veo este problema que el "hecho", "detener", "siempre", "completo" y algunas devoluciones de otros eventos no se invocan.carga de archivos bluetooth jquery - callbacks "completos", "completos" que no funcionan para IE 9

Al depurar, agregué console.logs en "done", "fail", "always" y agregué un método "completo" a la solicitud ajax en la función _onSend (en jquery.fileupload.js) - pero ninguno de ellos parece ser invocado en IE.

_onSend: function (e, data) { 
     var that = this, 
      jqXHR, 
      slot, 
      pipe, 
      options = that._getAJAXSettings(data), 
      send = function (resolve, args) { 
       that._sending += 1; 
       jqXHR = jqXHR || (
        (resolve !== false && 
        that._trigger('send', e, options) !== false && 
        (that._chunkedUpload(options) || $.ajax(options))) || 
        that._getXHRPromise(false, options.context, args) 
       ).complete(function (result, textStatus, jqXHR) { 
        console.log("complete"); 
       }).done(function (result, textStatus, jqXHR) { 
        console.log("done", result); 
       }).fail(function (jqXHR, textStatus, errorThrown) { 
        console.log("fail", result); 
       }).always(function (a1, a2, a3) { 
        console.log("done", result); 

        } 
       }); 
       return jqXHR; 
      }; 

[código del plugin recortada para facilitar la lectura]

entiendo que en IE 9, jquery.iframe-transport.js utilizan para la carga de archivos (como la carga de archivos XHR no son compatibles con IE).

No estoy seguro de cómo debo solucionar la corrección/depuración de este problema.

Gracias!

Respuesta

19

El evento hecho se activa si el tipo de contenido de la respuesta se establece en "text/html" o "text/plain" (en lugar de application/json) cuando json se devuelve desde el servidor. Esto se aplica solo a los navegadores que no admiten la carga de archivos XHR (como IE9) y en los que el complemento blueimp utiliza el transporte IFrame.

información relacionada en "Negociación de contenido" en la documentación del plugin: https://github.com/blueimp/jQuery-File-Upload/wiki/Setup

+1

¿cómo podemos hacer eso para la aplicación de rieles? – CanCeylan

+0

@CanCeylan: render: text => {...} .to_json en lugar de render: json => {...} – mkk

+0

@tanushree gracias por tomarse el tiempo para escribir esta respuesta. Solucionó un problema que he estado depurando por un tiempo. – PhysX

6

Para el registro, me encontré con este problema cuando la carga directa a S3, ahora que su función CORS lo permite.

La solución fue establecer success_action_status en '200', y luego el evento Done se desencadenó correctamente.

+8

Más detalles y Te invitaré. – guiomie

0

En caso de que alguien siga teniendo este problema con la carga directa a S3, la solución es agregar un campo success_action_status con el valor "201". Asegúrese de que también lo incluya como parte de los datos de política, ya que tienen que coincidir.

Al parecer, al recibir la carga de IE9 S3 devolverá una cadena vacía. Para que devuelva XML, que el cargador de archivos necesita, debe indicar que devuelve un estado de 201.

+0

¿Pudo analizar el resultado XML? Necesito obtener el nombre clave del archivo cargado, puedo verlo en la respuesta XML, pero 'data.result' no está definido con el método' done'. Parece que es debido a esto: https://github.com/blueimp/jQuery-File-Upload/wiki/Cross-domain-uploads#cross-site-iframe-transport-uploads. ¿Conoce alguna solución temporal? – Chris

+0

@chris ha pasado un tiempo desde que miré esto y no estoy 100% seguro de entender el problema que estás viendo. Pero acabo de verificar mi código y estoy accediendo a la carga de esta manera en ** on ('fileuploaddone', function (e, data) {...} ** de devolución de llamada como tal: ** file = data.files [ 0] ** – hraynaud

Cuestiones relacionadas