2016-03-21 49 views
4

POST isteği ile sonradan giriş sayfasından talep edilen bir JSON dosyasını kaydetmek istiyorum. Kullanılabilir bir API olmadığı için, sayfayı Greasemonkey kullanarak JSON dosyası olarak yüklerken çağrılan bir komut dosyasının yanıtını indirmek istiyorum.XHR dosyasını kaydetmek için javascript'i kullanma

Bu sayfa, aşağıdaki adresten domain.com/map/script dosyasını çağıran domain.com/map gibidir: <script type="text/javascript" charset="utf-8"> function open() {$.ajax{{ url: "/script", type: "POST", dataType: "json",), [...] }); }; function functionname(value){ [...] }; open();. Domain.com/map/script yanıtı kaydetmek istediğim gerçek JSON cevabı (FTP kullanarak yerel veya daha iyi). Aşağıda

+2

https://github.com/rndme/download sen gerisini işleyebilir, gerçek tasarruf parçası önemsiz kılan maymun işinin ... – dandavis

+1

Bence bu soruya cevap veriyor. http://stackoverflow.com/questions/3950131/how-can-i-create-a-file-for-storage-on-the-client-side-with-javascript – Henry

cevap

3

tam demo kodu:

(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 || {});

çıkış devtools-snippets#console-save

+0

Tnx! Davamım için bir kod örneği gönderebilir misin? Ödül vermek istiyorum! – Remco

+1

@Remco Yukarıda tam bir demo kodu ekledim, yardım için küçük ES6 sözdizimi. – Cotton

+0

Bu betiği Greasemonkey ile UserScript olarak kullanmak istiyorum. Gelen "domain.com/map/script" yanıtını beklemek zorundadır ("domain.com/map", "$ .ajax ({url:"/script ") çağrıldığında, şunu yazın:" POST ", dataType : "json", ''], daha sonra onu kaydeder.Onun üzerine düşünceleriniz? – Remco