Estoy intentando realizar una tarea bastante simple para mi sitio web, pero no estoy seguro de cómo hacerlo. Quiero que el usuario vea una tabla, luego haga clic en botón, en cuyo punto el usuario puede guardar el contenido de esa tabla como un archivo csv. Esta solicitud a veces puede ser bastante complicada, así que genero una página de progreso para alertar al usuario.Descargar el archivo CSV usando "AJAX"
Tengo la mayoría de las cosas resueltas excepto en realidad generar el archivo csv (utilizo jQuery y PHP)
el código de ejecución en jQuery clic:.
hmis_query_csv_export: function(query_name) {
$.uiLock('<p>Query Loading.</p><img src="/images/loading.gif" />')
$.get({
url: '/php_scripts/utils/csv_export.php',
data: {query_name: query_name},
success: function(data) {
$.uiUnlock();
}
});}
el PHP relevante:
header("Content-type: text/x-csv");
header("Content-Disposition: attachment; filename=search_results.csv");
//
//Generate csv
//
echo $csvOutput
exit();
Lo que esto hace es envía el texto que el archivo PHP, pero es que no genera una descarga. ¿Qué estoy haciendo mal?
Muchas gracias por los consejos. Puedo hacer que esto funcione muy fácilmente, pero me pregunto cómo podría usar esto mientras sigo implementando un bloqueo de pantalla y una animación de progreso. Me preocupa que los usuarios se confundan, ya que dependiendo de la consulta este proceso puede tomar hasta 3 o 4 minutos. –
Si va a llevar tanto tiempo crear el archivo CSV, puede necesitar cambiar ligeramente las direcciones y en su lugar usar AJAX para iniciar un script PHP que crea un archivo de disco temporal; una vez que el script PHP retorna (con un nombre de archivo) la función de devolución de llamada AJAX puede hacer la redirección como muestra Ast Derek. – godheadatomic
Por lo tanto, su edición parece que debería funcionar, pero parece que las declaraciones se ejecutan de forma asíncrona. La tercera instrucción no espera a que finalice la descarga, por lo que la pantalla de espera aparece y luego desaparece instantáneamente. ¿Hay alguna forma de forzarlo a ejecutar sincrónicamente? –