2013-04-18 33 views
23

Tôi có một hàm trong Javascript:Đẩy JSON Objects để mảng trong localStorage

var a = []; 
function SaveDataToLocalStorage(data) 
{  
    var receiveddata = JSON.stringify(data); 
    a.push(receiveddata); 
    alert(a); 

    localStorage.setItem('session', a); 

} 

tham số dữ liệu là một đối tượng JSON.

Nhưng mỗi khi tôi nhấp vào nút, nó sẽ ghi đè dữ liệu trong localstorage của tôi.

Có ai biết cách thực hiện việc này không?

+1

Cố gắng sử dụng 'window.a = []; 'và sau đó đẩy như thế này; 'window.a.push (receiveddata)'. Hoặc chỉ lưu trữ nó một lần trong một "a" mới khi bắt đầu chức năng. –

+0

vẫn ghi đè – nielsv

+0

Bạn cũng đang thực hiện trên đầu vào thực tế? 'localStorage.setItem ('session', window.a);' –

Trả lời

56

Có một vài bước bạn cần phải thực hiện để lưu trữ đúng cách thông tin này trong localStorage của bạn. Trước khi chúng tôi nhận được xuống mã, tuy nhiên, xin lưu ý rằng localStorage (tại thời điểm hiện tại) không thể giữ bất kỳ loại dữ liệu nào ngoại trừ chuỗi. Bạn sẽ cần serialize mảng để lưu trữ và sau đó phân tích nó trở lại để thực hiện sửa đổi cho nó.

Bước 1:

Đoạn mã dưới đây Đầu tiên chỉ nên chạy nếu bạn chưa lưu trữ một mảng serialized trong biến localStorage session của bạn.
Để đảm bảo localStorage bạn được thiết lập đúng cách và lưu trữ một mảng, chạy đoạn mã sau đây đầu tiên:

var a = []; 
a.push(JSON.parse(localStorage.getItem('session'))); 
localStorage.setItem('session', JSON.stringify(a)); 

Đoạn mã trên nên chỉ được chạy lần và chỉ nếu bạn chưa lưu trữ một mảng trong localStorage session biến. Nếu bạn đã làm điều này chuyển sang bước 2.

Bước 2:

Sửa đổi chức năng của bạn như sau:

function SaveDataToLocalStorage(data) 
{ 
    var a = []; 
    // Parse the serialized data back into an aray of objects 
    a = JSON.parse(localStorage.getItem('session')); 
    // Push the new data (whether it be an object or anything else) onto the array 
    a.push(data); 
    // Alert the array value 
    alert(a); // Should be something like [Object array] 
    // Re-serialize the array back into a string and store it in localStorage 
    localStorage.setItem('session', JSON.stringify(a)); 
} 

này nên chăm sóc phần còn lại cho bạn. Khi bạn phân tích nó ra, nó sẽ trở thành một mảng các đối tượng.

Hy vọng điều này sẽ hữu ích.

+0

Bạn là người giỏi nhất! Cảm ơn! – nielsv

+0

@ user1775531 Không có vấn đề gì! Vui mừng được giúp đỡ. Chúc may mắn và mã hóa hạnh phúc! :) – War10ck

+0

Cảm ơn. Bạn có biết làm thế nào tôi có thể lấy nó ra khỏi localstorage như mảng riêng biệt? – nielsv

8

Hiện tại, bạn có thể chỉ lưu trữ giá trị chuỗi trong localStorage. Bạn sẽ cần phải tuần tự hóa đối tượng mảng và sau đó lưu nó trong localStorage.

Ví dụ:

localStorage.setItem('session', a.join('|')); 

hoặc

localStorage.setItem('session', JSON.stringify(a)); 
-1
var arr = [ 'a', 'b', 'c']; 
arr.push('d'); // insert as last item 
5

Đặt toàn bộ mảng vào một mục nhập LocalStorage rất không hiệu quả: toàn bộ điều cần được mã hóa lại mỗi khi bạn thêm thứ gì đó vào mảng hoặc thay đổi một mục nhập.

Cách khác là sử dụng http://rhaboo.org lưu trữ bất kỳ đối tượng JS nào, tuy nhiên lồng nhau sâu, sử dụng một mục nhập cục bộ riêng biệt cho mỗi giá trị thiết bị đầu cuối.Mảng được khôi phục nhiều hơn nữa một cách trung thực, trong đó có bất động sản không phải số và nhiều loại hình thưa thớt, nguyên mẫu đối tượng/nhà thầu được khôi phục trong trường hợp tiêu chuẩn và API là lố bịch đơn giản:

var store = Rhaboo.persistent('Some name'); 
store.write('count', store.count ? store.count+1 : 1); 

store.write('somethingfancy', { 
    one: ['man', 'went'], 
    2: 'mow', 
    went: [ 2, { mow: ['a', 'meadow' ] }, {} ] 
}); 
store.somethingfancy.went[1].mow.write(1, 'lawn'); 

BTW, tôi đã viết nó.

+0

Đó là một thư viện tuyệt vời! Cảm ơn! –

2

Một điều tôi có thể đề nghị bạn là mở rộng đối tượng lưu trữ để xử lý các đối tượng và mảng.

trữ Cục bộ có thể xử lý chuỗi chỉ để bạn có thể đạt được điều đó bằng những phương pháp

Storage.prototype.setObj = function(key, obj) { 
    return this.setItem(key, JSON.stringify(obj)) 
} 
Storage.prototype.getObj = function(key) { 
    return JSON.parse(this.getItem(key)) 
} 

Sử dụng nó mỗi giá trị này sẽ được chuyển đổi sang chuỗi json trên bộ và phân tích trên có được