Ich habe den folgenden Code, mit dem Benutzer Datenzeichenfolgen in einer CSV-Datei herunterladen können.
exportData = 'data:text/csv;charset=utf-8,';
exportData += 'some csv strings';
encodedUri = encodeURI(exportData);
newWindow = window.open(encodedUri);
Es funktioniert einwandfrei, wenn der Client den Code ausführt, eine leere Seite generiert und die Daten in die CSV-Datei herunterlädt.
Also habe ich versucht, dies mit JSON-Objekt wie zu tun
exportData = 'data:text/json;charset=utf-8,';
exportData += escape(JSON.stringify(jsonObject));
encodedUri = encodeURI(exportData);
newWindow = window.open(encodedUri);
Ich sehe jedoch nur eine Seite mit den darauf angezeigten JSON-Daten, ohne sie herunterzuladen.
Ich habe einige Nachforschungen angestellt und diese behauptet zu funktionieren, aber ich sehe keinen Unterschied zu meinem Code.
Vermisse ich etwas in meinem Code?
Danke, dass du meine Frage gelesen hast :)
quelle
var storageObj = []; for (var i=0; i<1000000; ++i) storageObj.push('aaa');
gibt "Download fehlgeschlagen - Netzwerkfehler" in Chrome 61JSON.stringify(exportObj, null, 2)
stattdessen verwendenIch habe eine Antwort gefunden.
scheint für mich gut zu funktionieren.
** Alle Gutschriften gehen an @ cowboy-ben-alman, der der Autor des obigen Codes ist **
quelle
Dies wäre eine reine JS-Version (angepasst von Cowboys):
http://jsfiddle.net/sz76c083/1
quelle
Sie könnten versuchen, Folgendes zu verwenden:
saveAs()
MethodeSie müssen sich überhaupt nicht mit HTML-Elementen befassen.
Wenn Sie den JSON hübsch drucken möchten, können Sie gemäß dieser Antwort Folgendes verwenden:
quelle
Folgendes hat bei mir funktioniert:
und dann so zu nennen
quelle
initMouseEvent()
aber ein veralteter Webstandard und sollte nicht mehr verwendet werden. Verwenden Sie stattdessen dienew MouseEvent()
Schnittstelle. Es ist jedoch nur ein kleiner Refaktor.Ich musste kürzlich eine Schaltfläche erstellen, mit der eine JSON-Datei mit allen Werten eines großen Formulars heruntergeladen werden konnte. Ich brauchte dies, um mit IE / Edge / Chrome zu arbeiten. Das habe ich getan:
Es gab ein Problem mit Dateiname und Erweiterung in Edge, aber zum Zeitpunkt des Schreibens schien dies ein Fehler mit Edge zu sein, der behoben werden soll.
Hoffe das hilft jemandem
quelle
document.body.appendChild(a); a.style.display = 'none';
, damit es in Firefox funktioniert .Einfache, saubere Lösung für diejenigen, die nur auf moderne Browser abzielen:
quelle
Die
download
Eigenschaft von Links ist neu und wird in Internet Explorer nicht unterstützt (siehe Kompatibilitätstabelle hier ). Eine browserübergreifende Lösung für dieses Problem finden Sie in FileSaver.jsquelle
Reagieren : Fügen Sie dies an der gewünschten Stelle in Ihre Rendermethode ein.
• Objekt im Status :
• Objekt in Requisiten :
Klassenname und Stil sind optional. Ändern Sie den Stil entsprechend Ihren Anforderungen.
quelle
Versuchen Sie, einen anderen MIME-Typ festzulegen:
exportData = 'data:application/octet-stream;charset=utf-8,';
Es können jedoch Probleme mit dem Dateinamen im Dialogfeld "Speichern" auftreten.
quelle
data = "data:application/octet-stream;charset=utf-8," + encodeURIComponent(JSON.stringify(data)); window.open(data);
es lädt die Datei einfach als "Download" herunter, aber die Daten, die ich stringifiziert und dann uri-codiert habe, sind so, wie sie sein sollten.Wenn Sie ein Konsolen-Snippet (Raser) anstelle eines Dateinamens bevorzugen, können Sie dies tun:
quelle