Heim > Web-Frontend > js-Tutorial > Warum funktioniert AJAX nicht für Dateidownloads und was ist die beste Alternative?

Warum funktioniert AJAX nicht für Dateidownloads und was ist die beste Alternative?

Barbara Streisand
Freigeben: 2024-12-09 17:50:12
Original
619 Leute haben es durchsucht

Why Doesn't AJAX Work for File Downloads, and What's the Best Alternative?

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();
Nach dem Login kopieren

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");
?>
Nach dem Login kopieren

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:

  • HTML5 führt das Attribut „Download“ ein. Es wird von Firefox und Chrome unterstützt und wird bald in IE11 enthalten sein. Es ermöglicht das direkte Herunterladen von Dateien auf demselben Ursprung.

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';
}
Nach dem Login kopieren

Originallösung:

Verwenden 'window.location':

  • Im Gegensatz zu AJAX-Anfragen navigiert 'window.location' direkt zur Datei und löst den Download aus.

JavaScript :

$.ajax({
    url: 'download.php',
    type: 'POST',
    success: function() {
        window.location = 'download.php';
    }
});
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage