2013-12-10 2 views
3

Мне нужно сохранить объект Javascript в файл, чтобы его можно было легко перезагрузить в переменную, изменить и в конечном итоге повторно сохранить. Возможно ли это в Javascript, и если да, то каков наилучший способ приблизиться к нему. Например, если у меня есть:Сохранение объекта Javascript в файл

o = {"test": 2}; 

Как сохранить его в файле, загрузить, изменить и сохранить? Точно как pickle в Python.

Спасибо.

+0

Невозможно использовать только javascript. Лучшее, что вы могли бы сделать, это использовать localStorage, но это не постоянное хранилище. –

+0

Вам нужно сериализовать объект и отправить строку результата на язык сценария (например, Java, PHP и т. Д.), Который может создать файл из этого. – Benedikt

+0

Почему вы хотите уволить воду ...? Невозможно повторно сохранить –

ответ

3

Если вы в буквальном смысле означаете файл, это невозможно на стороне клиента. Однако, если это всего лишь данные, которые вы хотите сохранить и вспомнить, вы можете использовать файл cookie, если он маленький. http://www.sitepoint.com/how-to-deal-with-cookies-in-javascript/

Если оно больше, вам нужно использовать HTML5 LocalStorage. Однако это будет работать только в новых браузерах.

Вы могли бы сделать это, чтобы сделать счетчик посещений:

//try to load the data 
var o = localStorage.getItem("mydata"); 
//if the data is empty set the data 
if(!o) o = {"test": 0}; 
//increment the test value inside of o by one each time 
o.test++; 
//save the data to local storage 
localStorage.setItem("mydata", JSON.stringify(o)); 

http://diveintohtml5.info/storage.html

Опять же, это будет работать только на современных браузерах, таких как Chrome.

Традиционный метод должен был бы отправить его с помощью AJAX на стороне сервера скрипт, написанный на PHP, Python, Ruby, Java и т.д. ...

+0

FYI, ваш пример не работает так, как написано. Вы должны сначала создать JSON.Stringify (o), чтобы сохранить его, поскольку localStorage является только строковыми значениями. – Steve

+0

Спасибо @Steve Я отредактировал ответ, чтобы обновить его. – Lenny

2

Несмотря на все ответы, наоборот, это действительно возможно. Однако он ограничен поддержкой браузера. Вы можете использовать новый FileSystem APIs в последних версиях Chrome, и т.д:

window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem; 
window.requestFileSystem(window.PERSISTENT, 1024, function(fs) { 
    fs.root.getFile('mystorage.txt', {create: true, exclusive: true}, function(file) { 
     file.createWriter(function(writer) { 
      var blob = new Blob(["putdatahere"], {type: 'text/plain'}); 
      writer.write(blob); 
     }); 
    }); 
}, function() { 
    console.log("Could not access file system"); 
}); 

Поскольку вы хотите только файлы для собственных целей, это песочница подхода будет работать. Вам нужно пройти еще несколько обручей (запросить квоту, создав объект Blob), но они охватываются связанной статьей и будут зависеть от ваших требований.

+2

Стоит выделить из ссылки, которую вы опубликовали: «В апреле 2014 года было объявлено на публичных веб-сайтах, что спецификация API файловой системы не рассматривается другими браузерами. На данный момент API специфичен для Chrome, и вряд ли он будет реализован другие браузеры и больше не стандартизируются с W3C ». – MattSidor

Смежные вопросы