Descargue un archivo incorporado en el búfer de salida de PHP desde la llamada AJAX

Estoy tratando de construir un archivo CSV en PHP, luego llamar al archivo PHP desde una llamada AJAX, que luego iniciará una descarga del archivo CSV cuando la llamada AJAX tenga éxito. Esto funciona bien si guardo una copia física de .csv en el servidor, pero me gustaría usarphp://ouput así que no tengo que preocuparme por los archivos físicos que obstruyen el servidor. ¿Es posible iniciar una descarga desde volver?php://output a AJAX? Aquí está mi código:

HTML / jquery:

<!DOCTYPE html>

<html lang="en">
    <head>
        <meta charset="utf-8" />
        <script type="text/javascript" language="javascript" src="jquery.js"></script>
        <script type="text/javascript">
             $("#download").live("click", function() {
                var request = $.ajax({
                    dataType: 'html',
                    url: 'php.php',
                    success: function(response) {
                        alert('Finished');
                    }
                })
            })
        </script>
    </head>
    <body>
        <h1 id="download">DOWNLOAD</h1>
    </body>
</html>

PHP:

<?php 
    header('Content-type: application/vnd.ms-excel');
    header('Content-disposition: attachment; filename="test.csv"');
    $f = fopen('php://output', 'w');
    fwrite($f,'this,is,a,test');
    fclose($f);
    readfile('php://output');
    return;
?>

No estoy seguro de cómo obtener esto para devolver un cuadro de diálogo Guardar archivo de mi llamada AJAX.

Esto tiene que ser simple, pero parece que no puedo encontrar ningún ejemplo que combine estos dos problemas.

Respuestas a la pregunta(4)

Su respuesta a la pregunta