Dateien mit AJAX-Anfragen herunterladen: Eine umfassende Anleitung
Problem: Versuch, eine „Ajax-Download-Anfrage“ zu initiieren Beim Klicken auf die Schaltfläche werden nicht die gewünschten Ergebnisse erzielt. Nachfolgend finden Sie eine Demonstration in JavaScript und PHP:
JavaScript:
var xhr = new XMLHttpRequest(); xhr.open("GET", "download.php"); xhr.send();
PHP (download.php):
<? header("Cache-Control: public"); header("Content-Description: File Transfer"); header("Content-Disposition: attachment; filename= file.txt"); header("Content-Transfer-Encoding: binary"); readfile("file.txt"); ?>
Der obige Code funktioniert nicht wie erwartet. Können Sie Einblicke in die notwendigen Schritte zur Lösung dieses Problems geben?
Lösung:
Das Initiieren eines Dateidownloads über eine AJAX-Anfrage ist nicht möglich. Für diese Aufgabe ist direkter Zugriff auf die Datei erforderlich.
Aktualisierte Lösung (27. April 2015):
Attribut „Download“ verwenden:
JavaScript:
// Check if 'download' is supported if ('download' in HTMLAnchorElement.prototype) { // Create an anchor element var anchor = document.createElement('a'); // Set 'download' attribute and file URL anchor.download = 'file.txt'; anchor.href = 'download.php'; // Trigger file download anchor.click(); } else { // Fallback to previous method window.location = 'download.php'; }
Originallösung:
Verwenden 'window.location':
JavaScript :
$.ajax({ url: 'download.php', type: 'POST', success: function() { window.location = 'download.php'; } });
Der Einfachheit halber wird empfohlen, die AJAX-Anfrage ganz zu vermeiden und einfach zu verwenden 'window.location'.
Das obige ist der detaillierte Inhalt vonWarum funktioniert AJAX nicht für Dateidownloads und was ist die beste Alternative?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!