2013-02-24 25 views
7

Tôi đang phát triển một ứng dụng và tại một thời điểm nhất định, tôi cần lưu trữ thông tin yêu cầu phải liên tục giữa nhiều trang, nhiều khả năng hơn, nó sẽ chỉ là 2 trang. Lượng thông tin khác nhau giữa chỉ một vài byte và khoảng 15KB (Nó sẽ không bao giờ lớn hơn 20KB, bao giờ). Tôi thực sự không thể dự đoán chính xác trước được bao nhiêu.localStorage không lưu trữ liên tục giữa hai trang

Vì điều đó, tôi quyết định sử dụng localStorage.

Hiện tại, tôi chỉ làm việc trên máy chủ cục bộ: 8080.

Các trang, hiện chỉ có tên chung: pageA.php và pageB.php.

Các trang nằm ở gốc của miền. I E.

http://localhost:8080/pageA.php 
http://localhost:8080/pageB.php 

...

Tại thời điểm nhất định, tôi lưu trữ dữ liệu trên localStorage, trên pageA.php (Tôi sử dụng phương pháp SetItem()).

Khi người dùng chuyển sang pageB.php, tập lệnh của pageB.php sau đó tìm cách lấy dữ liệu được lưu trữ trong pageA.php.
Vấn đề là getItem() luôn trả về null trên pageB.php

Tôi đã kiểm tra các phím tôi đang sử dụng và chúng giống nhau, vì vậy không có vấn đề gì ở đó.

Tôi đã kiểm tra, dữ liệu được lưu trữ tồn tại giữa các lần tải trang miễn là url không thay đổi.

Tôi đang làm gì sai ở đây?

Lưu ý: chỉ được thử nghiệm trên Firefox 19 và trên chrome 24

+4

Có thể thuyết giảng cho dàn hợp xướng, nhưng trong trường hợp điều này sẽ giúp bạn: Trong công cụ dành cho nhà phát triển của Chrome (và tôi đoán có FireBug tương đương), bạn có thể theo dõi những gì trong bộ nhớ cục bộ. Nhấp chuột phải vào trang của bạn, chọn "Kiểm tra phần tử", sau đó trong tab "Tài nguyên", bạn sẽ tìm thấy "Bộ nhớ cục bộ" trong cây tài nguyên. – Sepster

+0

Cảm ơn bạn. Điều đó cho phép tôi tìm thấy những gì tôi đã làm sai. Tôi tự hỏi tại sao tôi quên về tính năng như vậy trên chrome: D. – brunoais

+1

Người bạn tình của tôi. Hầu như đã không viết nó trong trường hợp bạn flamed tôi cho chỉ ra chảy máu rõ ràng! ;-) Bạn có nhớ tự trả lời câu hỏi của mình với bất kỳ vấn đề/giải pháp nào bạn tìm thấy, để bài đăng này có thể giúp người khác trong tương lai không? – Sepster

Trả lời

2

Vấn đề ở đây là các biên tập Tôi đã sử dụng đã được thay đổi như vậy mà nó đang tìm kiếm với trường hợp nhạy cảm.
Khi tôi thay đổi chuỗi tôi đang sử dụng cho khóa, trình thay thế không khớp với tất cả các chuỗi do nhạy cảm của chữ hoa.
Tôi đã giải quyết nó bằng cách tìm kiếm và điều chỉnh từng khóa sao cho tất cả các phím có cùng ký tự với cùng một trường hợp, không phải các ký tự giống nhau bất kể trường hợp.
Cuối cùng, nó chỉ là thiếu sự chú ý. Theo dự kiến, các chuỗi trong javascript phân biệt chữ hoa chữ thường và cũng được áp dụng cho khóa cho localStorage và sessionStorage

+1

+1 D'oh!Tôi có thể khuyên bạn thay vì sử dụng chuỗi ký tự cho khóa của bạn, bạn sử dụng hằng số (psuedo) cho khóa của bạn, theo cách này, chúng được định nghĩa theo nghĩa đen chỉ một lần, do đó tránh thất bại do lỗi chính tả hoặc trường hợp. ví dụ 'var LSK_SOMEKEYNAME =" SomeKeyName ";' (LSK = khóa lưu trữ cục bộ). Cách tiếp cận này thực sự nên áp dụng _anywhere_ trong mã của bạn mà bạn đang sử dụng một số hằng số theo nghĩa đen trong mã của bạn (không chỉ là các chuỗi ký tự); nó giúp tránh vấn đề này và thêm ý nghĩa vào mã của bạn (ví dụ: 'lineNum = lineNum + 2' trở thành' lineNum = lineNum + LINE_OFFSET_DUE_TO_BLANK_LINES'). – Sepster

+0

Cảm ơn mẹo – brunoais

Các vấn đề liên quan