J'ai le code suivant pour permettre aux utilisateurs de télécharger des chaînes de données dans un fichier csv.
exportData = 'data:text/csv;charset=utf-8,';
exportData += 'some csv strings';
encodedUri = encodeURI(exportData);
newWindow = window.open(encodedUri);
Cela fonctionne très bien que si le client exécute le code, il génère une page vierge et commence à télécharger les données dans le fichier csv.
J'ai donc essayé de le faire avec un objet JSON comme
exportData = 'data:text/json;charset=utf-8,';
exportData += escape(JSON.stringify(jsonObject));
encodedUri = encodeURI(exportData);
newWindow = window.open(encodedUri);
Mais je ne vois qu'une page avec les données JSON affichées dessus, sans la télécharger.
J'ai fait quelques recherches et celui-ci prétend fonctionner mais je ne vois aucune différence dans mon code.
Est-ce que je manque quelque chose dans mon code?
Merci d'avoir lu ma question :)
la source
var storageObj = []; for (var i=0; i<1000000; ++i) storageObj.push('aaa');
donne «Échec du téléchargement - Erreur réseau» dans Chrome 61JSON.stringify(exportObj, null, 2)
placeJ'ai trouvé une réponse.
semble bien fonctionner pour moi.
** Tout le mérite revient à @ cowboy-ben-alman, qui est l'auteur du code ci-dessus **
la source
Ce serait une version pure de JS (adaptée de cowboy's):
http://jsfiddle.net/sz76c083/1
la source
Vous pouvez essayer d'utiliser:
saveAs()
Pas besoin de traiter du tout les éléments HTML.
Si vous voulez bien imprimer le JSON, par cette réponse , vous pouvez utiliser:
la source
Ce qui suit a fonctionné pour moi:
et puis l'appeler comme ça
la source
initMouseEvent()
s'agit d'un standard Web obsolète et ne devrait plus être utilisé. Utilisez plutôt l'new MouseEvent()
interface. C'est juste un petit refactor.J'ai récemment dû créer un bouton qui téléchargerait un fichier json de toutes les valeurs d'une grande forme. J'en avais besoin pour travailler avec IE / Edge / Chrome. C'est ce que j'ai fait:
Il y avait un problème avec le nom de fichier et l'extension dans Edge, mais au moment de l'écriture, cela semblait être un bogue avec Edge qui devait être corrigé.
J'espère que cela aide quelqu'un
la source
document.body.appendChild(a); a.style.display = 'none';
pour la faire fonctionner dans Firefox.Solution simple et propre pour ceux qui ne ciblent que les navigateurs modernes:
la source
La
download
propriété des liens est nouvelle et n'est pas prise en charge dans Internet Explorer (voir le tableau de compatibilité ici ). Pour une solution multi-navigateurs à ce problème, je jetterais un œil à FileSaver.jsla source
Réagissez : ajoutez ceci où vous voulez dans votre méthode de rendu.
• Objet en état :
• Objet dans les accessoires :
className et style sont facultatifs, modifiez le style selon vos besoins.
la source
Essayez de définir un autre type MIME:
exportData = 'data:application/octet-stream;charset=utf-8,';
Mais il peut y avoir des problèmes avec le nom de fichier dans la boîte de dialogue d'enregistrement.
la source
data = "data:application/octet-stream;charset=utf-8," + encodeURIComponent(JSON.stringify(data)); window.open(data);
il télécharge simplement le fichier en tant que "téléchargement" mais les données que j'ai stringifiées puis encodées en uri sont comme il se doit.Si vous préférez l'extrait de console, raser, au nom de fichier, vous pouvez le faire:
la source