2013-02-24 49 views
7

मैं एक एप्लीकेशन विकसित कर रहा हूं और, कुछ बिंदु पर, मुझे ऐसी जानकारी संग्रहीत करने की आवश्यकता है जो एकाधिक पृष्ठों के बीच लगातार रहना आवश्यक है, शायद अधिकतर, यह केवल 2 पृष्ठ होंगे। जानकारी की मात्रा केवल कुछ बाइट्स और लगभग 15 केबी के बीच बदलती है (यह कभी भी 20KB से अधिक नहीं होगी)। मैं वास्तव में भविष्यवाणी नहीं कर सकता कि यह कितना होगा।स्थानीय स्टोरेज दो पृष्ठों के बीच लगातार भंडारण नहीं कर रहा है

इसके लिए मैंने स्थानीय स्टोरेज का उपयोग करने का निर्णय लिया।

अभी के लिए मैं केवल स्थानीयहोस्ट पर काम कर रहा हूं: 8080।

पेज, अभी के लिए केवल सामान्य नाम हैं: pageA.php और pageB.php।

पृष्ठ डोमेन की जड़ पर रहते हैं। अर्थात।

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

...

कुछ समय में, मैं localStorage पर डेटा स्टोर, pageA.php पर (मैं setItem() पद्धति का उपयोग करते हैं)।

जब उपयोगकर्ता पृष्ठ बी.एफ़.पी.पी. पर जाता है, तो पृष्ठ बी.एफपी की स्क्रिप्ट तब पेज ए.एफ़.पी. में संग्रहीत डेटा प्राप्त करने का प्रयास करती है।
समस्या यह है कि getItem() हमेशा पेजबी.एफपी

पर मैंने शून्य को वापस कर दिया है, मैंने चाबियों की जांच की है और वे वही हैं, इसलिए वहां कोई समस्या नहीं होनी चाहिए।

मैंने जांच की है, डेटा संग्रह तब तक लोड होता है जब तक यूआरएल नहीं बदलता है।

क्या मैं गलत यहाँ कर रहा हूँ?

नोट: केवल फ़ायरफ़ॉक्स 19 पर और पर क्रोम 24

+4

गाना बजानेवालों के लिए प्रचार कर सकता है, लेकिन अगर यह आपकी मदद करता है: क्रोम के डेवलपर टूल में (और मुझे लगता है कि वहां एक है फायरबग समतुल्य) आप स्थानीय भंडारण में क्या देख सकते हैं की निगरानी कर सकते हैं। अपने पृष्ठ पर राइट क्लिक करें, "तत्व का निरीक्षण करें" का चयन करें, फिर "संसाधन" टैब के अंतर्गत आपको संसाधन वृक्ष में "स्थानीय संग्रहण" मिलेगा। – Sepster

+0

धन्यवाद। इससे मुझे यह पता चलने की अनुमति मिली कि मैं क्या गलत कर रहा था। मुझे आश्चर्य है कि मैं क्रोम पर इस तरह के फीचर के बारे में क्यों भूल गया: डी। – brunoais

+1

मेरी खुशी दोस्त। अगर आपने मुझे रक्तस्राव स्पष्ट रूप से इंगित करने के लिए फ्लेम किया तो लगभग इसे नहीं लिखा था! ;-) क्या आप अपने प्रश्न का उत्तर देने वाले किसी भी समस्या/समाधान के साथ स्वयं को जवाब दे सकते हैं, ताकि यह पोस्ट भविष्य में किसी और की मदद कर सके? – Sepster

उत्तर

2

समस्या का परीक्षण किया गया कि संपादक मैं उपयोग कर रहा था इस तरह है कि यह मामला संवेदनशीलता के साथ खोज रहा था बदल दिया गया था।
जब मैंने स्ट्रिंग को बदल दिया, तो मैं कुंजी के लिए उपयोग कर रहा था, प्रतिलिपि केस सेंसिटी के कारण सभी तारों से मेल नहीं खाती थी।
मैंने इसे प्रत्येक कुंजी को खोज और अनुकूलित करके हल किया जैसे कि सभी चाबियों में एक ही मामले के समान अक्षर थे, मामले के बावजूद समान वर्ण नहीं।
अंत में, यह ध्यान की कमी थी। जैसा कि अपेक्षित है, जावास्क्रिप्ट में तार केस संवेदनशील हैं और यह स्थानीय स्टोरेज और सत्र स्टोरेज

+1

+1 डी ओह!क्या मैं आपकी कुंजी के लिए शाब्दिक तारों का उपयोग करने की बजाय सिफारिश कर सकता हूं, आप अपनी कुंजी के लिए (psuedo) स्थिरांक का उपयोग करते हैं, इस तरह उन्हें सचमुच केवल एक बार परिभाषित किया जाता है, इस प्रकार टाइपो या मामले के कारण विफलताओं से परहेज करते हैं। उदाहरण के लिए 'var LSK_SOMEKEYNAME =" SomeKeyName ";' (एलएसके = स्थानीय भंडारण कुंजी)। इस दृष्टिकोण को वास्तव में आपके कोड में _anywhere_ लागू करना चाहिए कि आप अपने कोड में कुछ शाब्दिक स्थिरता का उपयोग कर रहे हैं (केवल स्ट्रिंग अक्षर नहीं); यह इस समस्या से बचने में मदद करता है, और आपके कोड में अर्थ जोड़ता है (उदाहरण के लिए 'lineNum = lineNum + 2'' lineNum = lineNum + LINE_OFFSET_DUE_TO_BLANK_LINES' बन जाता है)। – Sepster

+0

टिप के लिए धन्यवाद – brunoais