Estoy descargando un archivo dinámico en mi aplicación, simulando ajax usando iframes. Lo que estoy haciendo es que, cuando se realice la solicitud de descarga, crearé un iframe invisible dinámico y estableceré el src de mi iframe como URL de descarga. Puedo descargar el archivo con éxito, pero el requisito es mostrar una descarga. indicador una vez que se inicia la descarga y debe finalizar tan pronto como aparezca el cuadro de diálogo de descarga. Proporcioné la devolución de llamada después de la creación del iframe para mostrar el indicador de descarga, que está funcionando correctamente, y proporcioné otro método para 'cargar' el iframe, esperando se invocará cuando aparezca el diálogo de descarga. Pero desafortunadamente, eso no funciona, y debido a eso, incluso después de que se complete la descarga, mi indicador de progreso todavía está allí. No puedo eliminar eso. Luego me di cuenta de que, dado que el tipo de contenido de la respuesta no es html, será atendido por un proceso separado, que conduce al diálogo de descarga y debido a eso mi método de carga nunca se llama. Por favor, hágame saber una solución para esto.Descarga de archivo Ajax Problema
Respuesta
usted debe comenzar un temporizador en el cliente cuando la solicitud de descarga se hace que comprueba el estado del iframe en un intervalo especificado:
if ((iframe.document && iframe.document.readyState == 'complete')
|| iframe.contentDocument)
{
stopTimer();
closePopupDialog();
}
Puede utilizar un administrador de descarga flash - google revelará una gran cantidad de ellos.
Su otra opción es utilizar AJAX real. Simplemente haga una solicitud al URI de descarga, y cuando obtenga su respuesta, use el responseBody en lugar del atributo responseText del objeto XMLHTTPRequest.
Usted necesitará una manera de escribir que para el disco duro, lo que se puede hacer en IE con restricciones de seguridad laxas y la ActiveXObject "Scripting.FileSystemObject" Usted puede ser capaz de utilizar el enfoque de URI de datos: http://en.wikipedia.org/wiki/Data_URI_scheme con una base 64 codificación, pero no estoy seguro si eso funcionará.
De lo contrario, vuelve al flash para escribir en el disco los datos que descargó a través de ajax.
Si conoce el tamaño de la descarga dinámica y el tiempo exacto no es necesario en la especificación, entonces podría hacer una verificación de velocidad de Internet antes de la descarga, agregar un poco de tiempo de búfer al tiempo calculado que tardará en descargarse archivo, y solo muestra el cuadro de diálogo para ese período de tiempo determinado. Muy hacker, pero de nuevo este esquema parece un poco de marketing, requiere-que-a-ser-para-que-se-ser
ver este, podría ayudar u
ver este , podría ayudar u
http://bytes.com/topic/javascript/answers/610641-file-download-ajax
eso es lo que he estado buscando. Gracias ! :) – Tony
Creé el jQuery File Download plugin (Demo) que también soluciona el problema y proporciona algunas otras características agradables. Básicamente, te ofrece una experiencia "completa de Ajax" para las descargas de archivos (incluso con devoluciones de llamadas) que normalmente no es posible para la descarga de archivos.Funciona bastante similar a algunas otras respuestas con un iframe, pero tiene algunas características interesantes que he encontrado muy útil:
- usuario nunca sale de la misma página que inician una descarga de archivos a partir de si es correcta o hay un error
- funciones successCallback y failCallback permiten que usted sea explícito acerca de lo que el comportamiento de la interfaz de usuario está en cualquiera de estas situaciones
- en conjunción con jQuery UI un desarrollador puede mostrar fácilmente un modal que indica al usuario que se está produciendo una descarga de archivos, disolver el modal después de que comience la descarga o incluso informar al usuario de manera amistosa que ha ocurrido un error. Consulte el Demo para ver un ejemplo de esto.
Aquí hay una demo de caso de uso simple que utiliza el complemento source con promesas. El demo page incluye muchos otros ejemplos de 'mejor UX' también.
$.fileDownload('some/file.pdf')
.done(function() { alert('File download a success!'); })
.fail(function() { alert('File download failed!'); });
- 1. jQuery Ajax llamado a archivo PDF descarga
- 2. Descarga de archivos Ajax usando Jquery, PHP
- 3. Descarga de archivos JQuery con Ajax
- 4. problema de descarga de archivos de video
- 5. Problema de Primefaces: p: descarga de archivo de p: datatable con bean gestionado ViewScoped
- 6. C++: problema de descarga de Dll
- 7. CodeIgniter ajax CSRF problema
- 8. AJAX problema entre dominios
- 9. Descarga de archivos usando Java, Struts 2 y AJAX
- 10. Descarga de archivo OpenXML sin archivo temporal
- 11. Archivo de seguimiento descarga completa
- 12. Cómo implementar una descarga de archivos en ASP.NET AJAX
- 13. ¿Cómo se ejecuta la función ajax antes de la descarga?
- 14. ¿Descarga de archivos en php, problema de límite de memoria?
- 15. comenzando la descarga del archivo con JavaScript
- 16. Problema de Ajax CSRF en Django 1.3
- 17. jQuery AJAX PHP JSON problema
- 18. Problema de descarga de archivos: ¡nombre de archivo con espacios truncados!
- 19. Carga de archivo Ajax
- 20. archivo de prueba de pepino descarga
- 21. ReCAPTCHA ajax problema de tema cargado
- 22. descarga y descomprime el archivo en iOS
- 23. google app engine archivo de descarga python
- 24. Descarga de un archivo dll en mef
- 25. Crear archivo de texto y descarga
- 26. Descarga de un archivo en Delphi
- 27. wget rechazar aún el archivo de descarga
- 28. Descarga del archivo .zip se ejecuta un archivo dañado php
- 29. usando reCAPTCHA con ajax .... javascript problema de carga
- 30. Descargar archivo usando descarga parcial (HTTP)
Above one está muy cerca de la solución, pero en mi caso, readyState nunca llegó a ser "completo" incluso después de la descarga, permaneció en estado "interactivo". ¿Alguna idea de cuál podría ser el problema? – Bibin
acaba de llegar a saber que, la disposición del contenido juega un papel en eso. Consulte ** [this] (http://www.atalasoft.com/cs/blogs/jake/archive/2009/06/18/events-to-expect-when-dynamically-loading-iframes-in-javascript. aspx) ** – Bibin
Este método * desafortunadamente * no funciona debido al comportamiento inconstante de readyState en todos los navegadores. Por ejemplo, Chrome nunca cambia. –