Domanda

Ho uno script che forza un download e faccio una chiamata tramite Javascript. Tuttavia, la finestra di dialogo non viene visualizzata, ecco lo script download.php:

header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers 
header("Content-Type: $ctype");
// change, added quotes to allow spaces in filenames, by Rajkumar Singh
header("Content-Disposition: attachment; filename=\"".basename($properFilename)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));
readfile("$filename");
exit();

Ecco il Javascript (usando JQuery):

///force download
           $.ajax({
           type: "GET",
           url: "download.php",
           data: 'file=' + msg + '&properFilename=' + properFileName,
           success: function(msg){

              window.location.href = msg;

         });//ajax

Questo reindirizza il mio browser a un'altra pagina anziché mostrare la finestra di dialogo verso il basso.

So che la variabile JS msg contiene il file con le intestazioni giuste ma non so cosa farne per visualizzarlo nella finestra di dialogo di download.

Grazie a tutti

P.S. Non sapevo dove mettere questa discussione JS o PHP.

EDIT:

Ho l'approccio giusto, ne sono sicuro :) - Un utente arriva sul mio sito, compilano un modulo e premono Invia. Dopo alcuni secondi il loro file dovrebbe apparire in una finestra di dialogo che possono scaricare. Per fare questo:

Eseguo una chiamata AJAX per ottenere il file e scaricarlo. Uso lo script PHP per inviare le intestazioni. Ora tutto ciò di cui ho bisogno è un modo per visualizzare la finestra di dialogo di download !!

È stato utile?

Soluzione

Non mostra la finestra di dialogo proprio per il fatto che si tratta di una chiamata Ajax.

window.location.href = msg;

Ecco cosa ti sta reindirizzando. Non penso che tu abbia bisogno di una chiamata Ajax qui, basta chiamare la pagina normalmente con un link href.

modifica

Se si desidera inviare il modulo e mostrare la finestra di dialogo per il download, procedere come segue:

<script>
function showDialogBox(form) {
    form.submit();
    window.location.href = "/download.php?file=XXX&properFilename=XXX";
}
</script>
<form onsubmit="showDialogBox(this);">

</form>

Altri suggerimenti

Se è lo script download.php completo non riesco a trovare la variabile $ file (solo un $ nomefile) - ma in JS invii una variabile $ file. Secondo: qualcosa di sbagliato in JS - perché usi tale nome variabile msg in data: e in successo: ?

La mia opinione è che ci si può aspettare, come osserva sktrdie. Non posso testare in questo momento, ma se ci pensi: l'utente, di per sé, non riceve alcuna notifica sulle cose AJAX che stai facendo. Avere improvvisamente un messaggio del genere sarebbe irritante.

Suppongo che se crei un iframe (anche nascosto?) su quella pagina e reindirizzi a quell'URL di download, otterrai quella finestra di dialogo. YMMV, HTH.

Non ho programmato php per un po ', quindi non sono sicuro che ci sia qualcosa di sbagliato nel tuo codice. Ma penso che il problema sia nel tuo approccio. Devi caricare download.php in un frame non come risposta a una chiamata ajax. Quindi, in pratica, devi formare un iframe invisibile nel documento e puntarlo a download.php con i parametri get aggiunti all'URL.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top