SessionStorage dan LocalStorage memungkinkan untuk menyimpan pasangan kunci / nilai di browser web. Nilai harus berupa string, dan menyimpan objek js tidak sepele.
var user = {'name':'John'};
sessionStorage.setItem('user', user);
var obj = sessionStorage.user; // obj='[object Object]' Not an object
Saat ini, Anda dapat menghindari batasan ini dengan membuat serialisasi objek ke JSON, dan kemudian membatalkan deserialisasi untuk memulihkan objek. Tetapi API Penyimpanan selalu melewati setItem
dan getItem
metode.
sessionStorage.setItem('user', JSON.stringify(user));
var obj = JSON.parse(sessionStorage.getItem('user')); // An object :D
Bisakah saya menghindari batasan ini?
Saya hanya ingin menjalankan sesuatu seperti ini:
sessionStorage.user.name; // 'John'
sessionStorage.user.name = 'Mary';
sessionStorage.user.name // 'Mary'
Saya telah mencoba defineGetter
dan defineSetter
metode untuk mencegat panggilan tetapi itu pekerjaan yang membosankan, karena saya harus mendefinisikan semua properti dan target saya bukan untuk mengetahui properti masa depan.
javascript
session-storage
Ferran Basora
sumber
sumber
Jawaban:
Entah Anda dapat menggunakan pengakses yang disediakan oleh Web Storage API atau Anda bisa menulis pembungkus / adaptor. Dari masalah yang Anda nyatakan dengan defineGetter / defineSetter terdengar seperti menulis bungkus / adaptor terlalu banyak bekerja untuk Anda.
Sejujurnya aku tidak tahu harus berkata apa. Mungkin Anda bisa mengevaluasi kembali pendapat Anda tentang apa itu "batasan konyol". API Penyimpanan Web adalah apa yang seharusnya, toko kunci / nilai.
sumber
Tidak bisakah Anda 'merangkai' objek Anda ... lalu gunakan
sessionStorage.setItem()
untuk menyimpan representasi string objek Anda ... lalu ketika Anda membutuhkannyasessionStorage.getItem()
dan kemudian gunakan$.parseJSON()
untuk mengeluarkannya kembali?Contoh kerja http://jsfiddle.net/pKXMa/
sumber
Solusinya adalah dengan mengencangkan objek sebelum memanggil setItem pada sessionStorage.
sumber
Ini adalah solusi dinamis yang bekerja dengan semua tipe nilai termasuk objek:
Kemudian :
sumber
Gunakan kasus:
API
sumber
if (typeof (Storage) !== "undefined"){ /* browser supports it */ }
Penyimpanan sesi tidak dapat mendukung objek sewenang-wenang karena mungkin berisi fungsi literal (penutupan baca) yang tidak dapat direkonstruksi setelah pemuatan ulang halaman.
sumber
sumber
Anda juga bisa menggunakan perpustakaan toko yang melakukannya untuk Anda dengan kemampuan crossbrowser.
contoh:
sumber
Anda dapat membuat 2 metode pembungkus untuk menyimpan dan mengambil objek dari penyimpanan sesi.
Gunakan seperti ini: - Dapatkan objek, modifikasi beberapa data, dan simpan kembali.
sumber