ich einen PHP-Skript, das eine $_POST
Variable akzeptiert eine PDF-Datei herunterladen auslösen, und das Skript gesetzt ist bereits die Datei als Download zurückzukehren eher zu laden als die Datei im Browser oder speichern Sie die Datei auf dem Server.jQuery PDF Download - bitte warten und Erfolgsmeldungen
Ich kann diese Datei herunterladen, mit einem einfachen Formular, überhaupt keine Probleme, aber da es etwa 5 bis 10 Sekunden Verarbeitungszeit gibt, entschied ich mich zu versuchen und haben jQuery behandeln das click
Ereignis, so dass ich eine anzeigen konnte "Bitte warten" -Meldung, während das Skript verarbeitet wird und eine Meldung "Dateidownload wurde gestartet", wenn die Verarbeitung abgeschlossen ist, was, wie sich herausstellt, viel schwieriger ist, als ich es mir erhofft hatte.
Ich kann die click
erhalten, um die "Bitte warten" Nachricht anzuzeigen, aber kann dann nicht feststellen, wann die Seite verarbeitet wurde, so dass die Nachricht "Bitte warten" auch nach dem Herunterladen der PDF-Datei erhalten bleibt.
Wenn ich jQuery verwenden, um die click
Ereignis und POST
die Daten mit ajax
zu handhaben, preventDefault
verwenden, erhalte ich die richtige „Wait“ und „Download Started“ Nachrichten, aber das Herunterladen der Datei an den Browser nicht zurückkehren kann.
Ich habe beide Methoden temporär integriert, indem ich nicht preventDefault
benutze, was dem Benutzer das genaue Verhalten ist, das ich will: es zeigt "Bitte warten" bis der Dateidownload startet und dann "Dateidownload gestartet" wenn die Datei beginnt tatsächlich zu downloaden. Aber, wie ich sicher bin, liegt auf der Hand, dies zu veröffentlichen die Daten tatsächlich zweimal: einmal mit dem form
und das andere mit jQuery
, und da sie die gleiche Menge an Zeit, um die Anforderung die Funktionalität Ich möchte erreicht abzuschließen.
Gibt es eine Möglichkeit erreiche, was ich richtig will?
HTML-Formular ($filename
ist aus dem Datenbank-Aufruf)
<form method="post" action="pdf/index.php" name="pdfForm" id="pdfForm">
<button type="submit" class="downloadButton"
name="filename" value="'.$filename.'">'.$filename.'</button>
</form>
"Arbeiten" jQuery (es gibt eine gewisse Redundanz von anderen Versionen habe ich versucht, sorry)
<script>
$(document).ready(function() {
$('.downloadButton').on('click', function(e) {
//e.preventDefault(); // File will not download if this is not commented out
var $filename = $(this).val();
var $thisBox = $(this);
var $url = $('#pdfForm').attr('action');
$thisBox.text("Please Wait");
url = $url;
return $.post(url, {filename: $filename})
.done(function(data) {
$thisBox.text("File Download has started");
// This won't happen unless e.preventDefault() is excluded
});
});
});
</script>
Ich habe unzählige andere Fragen auf der Suche nach einer Lösung durchforstet, aber nichts gefunden, was für mich funktioniert. Am nächsten kam ich mit ajax
blob
, aber ich brauche Unterstützung für ältere Browser und die Ergebnisse waren sowieso nicht großartig.
Jede Hilfe wäre sehr dankbar, hoffentlich kann ich nur fehlt etwas offensichtlich und jetzt nicht sehen, daß es so lange es sah zu haben.