2016-03-21 10 views
4

Ich möchte eine JSON-Datei speichern, die auf einer After-Login-Seite mit einer POST-Anfrage angefordert wird. Da keine API verfügbar ist, möchte ich die Antwort eines Skripts herunterladen, das beim Laden der Seite als JSON-Datei mit Greasemonkey aufgerufen wird.Verwenden von Javascript zum Speichern der XHR-Datei

Die Seite ist wie domain.com/map, die domain.com/map/script während des Ladens ruft: <script type="text/javascript" charset="utf-8"> function open() {$.ajax{{ url: "/script", type: "POST", dataType: "json",), [...] }); }; function functionname(value){ [...] }; open();. Die Antwort von domain.com/map/script ist die eigentliche JSON-Antwort, die ich speichern möchte (lokal oder besser mit FTP).

+2

https://github.com/rndme/download macht die tatsächliche Einsparung Teil trivial, können Sie den Rest erledigen kann der Affe Geschäft ... – dandavis

+1

Ich denke, das beantwortet Ihre Frage. http://stackoverflow.com/questions/3950131/how-can-i-create-a-file-for-storage-on-the-client-side-with-javascript – Henry

Antwort

3

vollständige Demo-Code unten:

(function (fetch, console) { 
 

 
    fetch('https://api.stackexchange.com/2.2/questions/36132760?site=stackoverflow') 
 
     .then(res => res.json()) 
 
     .then(data => console.save(data)); 
 

 
    console.save = function (data, filename) { 
 

 
      if (!data) { 
 
       console.error('Console.save: No data') 
 
       return; 
 
      } 
 

 
      if (!filename) filename = 'console.json' 
 

 
      if (typeof data === "object") { 
 
       data = JSON.stringify(data, undefined, 4); 
 
      } 
 

 
      var blob = new Blob([data], {type: 'text/json'}), 
 
       e = document.createEvent('MouseEvents'), 
 
       a = document.createElement('a'); 
 

 
      a.download = filename; 
 
      a.href = window.URL.createObjectURL(blob); 
 
      a.dataset.downloadurl = ['text/json', a.download, a.href].join(':'); 
 
      e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); 
 
      a.dispatchEvent(e); 
 
    }; 
 

 
}).call(this, window.fetch, window.console || {});

Kasse devtools-snippets#console-save

+0

Tnx! Können Sie ein Codebeispiel für meinen Fall veröffentlichen? Ich möchte das Kopfgeld geben! – Remco

+1

@Remco Ich habe oben vollständigen Demo-Code hinzugefügt, wenig ES6 Syntax für Hilfe tho. – Cotton

+0

Ich möchte dieses Skript als UserScript mit Greasemonkey verwenden. Es muss auf die Antwort "domain.com/map/script" warten, die hereinkommt (beim Aufruf von "domain.com/map", "$ .ajax ({url:"/script ", Typ:" POST ", dataType) : "json", "'), und dann speichern. Irgendwelche Gedanken dazu? – Remco

Verwandte Themen