Ich muss große Datei im Excel-Format exportieren und herunterladen. Ich benutze PHP-Excel. Datei ist sehr groß, so dass es viel Zeit in Export dauert. also benutze ich async ajax call und auf serverseite verwende ich session_write_close. Dadurch kann ich gleichzeitige Anrufe senden. Das funktioniert gut, wenn ich auf der gleichen Seite bleiben ... aber wenn ich Ajax Anruf an senden exportieren und herunterladen Datei und danach umleiten ich auf eine neue Seite vor der Fertigstellung dieser Ajax Anruf dann, dass Ajax Anruf abgebrochen wurde und Datei kann nicht heruntergeladen werden. Wie kann ich eine Datei exportieren und sie dann herunterladen, auch nachdem der Benutzer auf eine neue URL umgeleitet wurde?wie exportiert und dann eine Excel-Datei mit Ajax-Aufruf im Hintergrund in PHP herunterladen
Antwort
Es gibt mehrere Möglichkeiten, die Download-Aktion auf derselben Seite durchzuführen. Die Verwendung von Async kann zu Problemen führen, da Ihre Anwendung möglicherweise zwischen den AJAX-Operationen zurückbleibt.
Meiner Meinung nach können Sie Ihre Ajax Anfrage auf diese Weise tun.
Nach der Erstellung der Datei verwenden Sie den Befehlszeilen-Ansatz, wenn es möglich ist. Oder Sie können einfach den Systembefehl mit dem Befehl curl oder elinks verwenden und die URL übergeben, die zum Generieren der Excel-Datei verwendet wird.
curl http://mysite/generate/excel?id=123
oder
elinks http://mysite/generate/excel?id=123
Durch die Verwendung von Ajax (sync) Sie können eine Anfrage mit lebendig Option halten und in Ihrem Code überprüfen, ob die Datei mit einem Intervall erzeugt wird. Ihr Code wie dies
while (!file_exists("path/to/excel_file.xlsx")) {
usleep(2000);
}
echo json_encode(["status" => true, "file_url" => "http://mysite/url/to/excel_file.xlsx"]);
seine Sobald Sie Antwort von Ajax erhalten, auf Erfolg Funktionsaufruf unter Funktion mit Datei-URL-Datei über iframe auf der gleichen Seite zum Download bereit.
downloadAttachment(response.file_url)
/* Amazing download management with error handling */
var downloadAttachment = function(link){
var iframe = document.createElement("iframe"), iframeWindow;
iframe.src = link;
document.body.appendChild(iframe);
iframe.onload = function(){
response = JSON.parse($(iframe).contents().text())
if(!response.status)
{
alert(response.message);
$(iframe).remove();
}
}
setTimeout(function(){
$(iframe).remove();
},10000)
}
Dies ist logisch Fluss, wie große Dateien herunterladen, wenn es lange dauert zu erzeugen.
Sehr geehrte Pratik, Vielen Dank für Ihre Antwort, aber es dauert nicht wirklich Zeit beim Herunterladen dauert es Zeit ** Generieren Excel-Datei und während dieser Zeit, wenn der Client auf andere Seite umleiten dann Aufrufe abgebrochen und Datei doesn ' t heruntergeladen werden, auch wenn die Dateierzeugung abgeschlossen ist. –
@Muhammad, Ja das wollte ich genau erklären. Möglicherweise müssen Sie die Weiterleitung alarmieren. 'window.onbeforeunload' oder Sie müssen via Socket oder auf andere Weise, wie immer wenn eine Seite geladen wird, überprüfen, ob die Datei für diesen Benutzer existiert und eine Aktion zum Herunterladen der Datei durchführen. –
- 1. Herunterladen von Daten im Hintergrund mit iOS4
- 2. AFNetworking 2.0.0 im Hintergrund herunterladen
- 3. Herunterladen von Bildern im Hintergrund mit j2me und lwuit
- 4. Herunterladen im Hintergrund stoppt in iOS 10 nur mit alamofire
- 5. Javascript PHP-Datei ausführen und dann Datei herunterladen
- 6. PHP-Prozess im Hintergrund ausführen und Ergebnisse
- 7. PHP-Datei herunterladen mit PHP-Header
- 8. Android: PHP im Hintergrund Thread
- 9. Wie kann ich eine Datei in php erstellen und herunterladen
- 10. Datei im Hintergrund herunterladen, wenn App ohne Kiosk in iOS
- 11. Aktuellen Hintergrund herunterladen
- 12. Hintergrund herunterladen einer Datei
- 13. Kann UnicastRemoteObject exportiert und dann als Argument übergeben werden
- 14. Datei herunterladen und dann verlassen Seite
- 15. exportiert und nicht exportiert in Go Erklärung
- 16. herunterladen JSON im Hintergrund und Daten in Coredata setzen holen in Tableview in Swift
- 17. Erstellen und Herunterladen von CSV mit PHP
- 18. wie eine Datei mit Broadcast-Empfänger herunterladen?
- 19. Formularüberprüfung funktioniert nicht nach Ajaxaufruf
- 20. Wie `angular2` eine Komponente exportiert?
- 21. Wie exportiert und importiert eine XSD-Datei in Visual Studio?
- 22. Bilder im Hintergrund herunterladen, während die Listenansicht angezeigt wird
- 23. Gehe zur PHP-Seite im Hintergrund
- 24. Wie können Dateien im Projekt geändert und exportiert werden?
- 25. Inhalte mit file_get_contents herunterladen und dann löschen nach
- 26. Wie kann ich die Datei im selben tcl-Skript herunterladen und dann verwenden?
- 27. wie eine Datei vom Server mit php herunterladen
- 28. wie eine Konsole Skript im Hintergrund
- 29. Programm im Hintergrund ausführen, UND Rückgabecode erfassen (PHP & Windows)
- 30. Wie lade ich eine Seite im Hintergrund?
Ohne Ihren Code anzusehen? Öffnen eines Ajax-Anrufs in einem neuen Fenster oder Warten auf Beendigung des Anrufs, bevor auf eine neue Seite umgeleitet wird. –
Content-Disposition: in Ihrer Datei –
Der folgende Code ist für das Generieren des Aufrufs verantwortlich. 'GetReportData: function() {$ .ajax ({ Typ: 'POST', async: true, url: url, datatype: "json", Daten: Daten}) .done (function (Daten) { var $ a = $ $ a.attr ("href", data.file); $ ("body"). Append ($ a); $ a.attr (" download ", data.name); $ a [0] .click(); $ a.remove(); }); } ' –