Asynchrones Herunterladen von Dateien mit PHP: Eine umfassende Anleitung
Beim Erstellen interaktiver Webanwendungen besteht häufig die Notwendigkeit, Dateien asynchron herunterzuladen. Mit dieser Methode können Sie Dateien von einem Server abrufen, ohne die gesamte Seite zu aktualisieren, was die Benutzererfahrung verbessert. Dieser Artikel konzentriert sich auf die Verwendung von PHP zum Erreichen asynchroner Dateidownloads.
Wir werden uns mit einem häufigen Szenario befassen, bei dem eine Schaltfläche eine AJAX-Funktion auslöst. Die AJAX-Funktion sendet Daten an ein PHP-Skript, das wiederum eine CSV-Datei basierend auf den Eingaben des Benutzers erstellt. Die Herausforderung besteht darin, den Browser zum Herunterladen dieser neu erstellten CSV-Datei zu veranlassen.
AJAX-Funktion für die Initiierung des Dateidownloads
Wie im bereitgestellten Codeausschnitt beschrieben, klicken Sie auf die Schaltfläche initiiert die AJAX-Funktion csv().
function csv(){ $ajaxRequest = ajax();//ajax() initializes XML HTTP Requests $postdata = "data=" + document.getElementById("id").value; $ajaxRequest.onreadystatechange = function(){ $ajaxDisplay = document.getElementById('ajaxDiv'); if($ajaxRequest.readyState == 4 && $ajaxRequest.status==200){ $ajaxDisplay.innerHTML = $ajaxRequest.responseText; } } $ajaxRequest.open("POST","csv.php",false); $ajaxRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); $ajaxRequest.send($postdata); }
PHP-Code für die Dateierstellung und den Download Eingabeaufforderung
Das csv.php-Skript übernimmt die Dateierstellung und die Download-Eingabeaufforderung. Das bereitgestellte Skript ist jedoch nicht für unseren Zweck geeignet.
$fileName = 'file.csv'; $downloadFileName = 'newfile.csv'; if (file_exists($fileName)) { header('Content-Description: File Transfer'); header('Content-Type: text/csv'); header('Content-Disposition: attachment; filename='.$downloadFileName); ob_clean(); flush(); readfile($fileName); exit; } echo "done";
Wenn dieses Skript am Ende von csv.php eingefügt wird, wird der Inhalt von file.csv innerhalb der Seite angezeigt (im ajaxDiv-Element). ) anstatt einen Download zu starten.
Lösung: Ein neues Fenster für den Download verwenden
Zum Erzwingen Bei einem Download können wir uns nicht auf AJAX verlassen. Stattdessen können wir ein neues Fenster mit dem Download-Link als Adresse öffnen oder document.location = ....
window.open('download.php?file=' . $fileName, '_blank'); // or document.location = 'download.php?file=' . $fileName;
Fazit
Für asynchrone Dateien verwenden Downloads in PHP, vermeiden Sie die Verwendung von AJAX. Erwägen Sie, ein neues Fenster mit dem Download-Link zu öffnen oder den Speicherort des Dokuments umzuleiten, um den Download zu starten.
Das obige ist der detaillierte Inhalt vonWie kann ich asynchrone Dateidownloads in PHP erreichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!