चूंकि HTTP स्टेटलेस है, हर बार जब आप पृष्ठ को लोड करते हैं तो यह जावास्क्रिप्ट में आपके द्वारा सेट किए गए शुरुआती मूल्यों का उपयोग करेगा। आप JS में एक वैश्विक चर सेट नहीं कर सकते हैं और पृष्ठ को फिर से लोड करने के बाद बस उस मूल्य को बनाए रख सकते हैं।
ऐसे कुछ तरीके हैं जिनसे आप मूल्य को किसी अन्य स्थान पर संग्रहीत कर सकते हैं ताकि आप इसे जावास्क्रिप्ट का उपयोग करके लोड पर आरंभ कर सकें
क्वेरी स्ट्रिंग
GET
विधि का उपयोग करके एक फॉर्म सबमिट करते समय , url एक स्ट्रिंग स्ट्रिंग ( ?parameter=value&something=42
) के साथ अपडेट हो जाता है । आप एक निश्चित मान के रूप में इनपुट फ़ील्ड सेट करके इसका उपयोग कर सकते हैं। यह सबसे सरल उदाहरण होगा:
<form method="GET">
<input type="hidden" name="clicked" value="true" />
<input type="submit" />
</form>
पृष्ठ के प्रारंभिक लोड पर, कोई क्वेरी स्ट्रिंग सेट नहीं है। जब आप यह फ़ॉर्म सबमिट करते हैं, तो इनपुट स्ट्रिंग के संयोजन name
और value
संयोजन को स्ट्रिंग स्ट्रिंग में पास कर दिया जाता है clicked=true
। इसलिए जब पृष्ठ उस क्वेरी स्ट्रिंग के साथ फिर से लोड होता है तो आप जांच सकते हैं कि बटन क्लिक किया गया था या नहीं।
इस डेटा को पढ़ने के लिए, आप पृष्ठ लोड पर निम्न स्क्रिप्ट का उपयोग कर सकते हैं:
function getParameterByName(name) {
name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
results = regex.exec(location.search);
return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}
var clicked = getParameterByName('clicked');
( स्रोत )
इसका उपयोग करने की क्षमता इस बात पर निर्भर करती है कि आपका फॉर्म वर्तमान में कैसे काम करता है, यदि आप पहले ही एक पोस्ट का उपयोग करते हैं तो यह समस्याग्रस्त हो सकता है।
इसके अलावा, डेटा के बड़े सेट के लिए यह इष्टतम से कम है। एक स्ट्रिंग के आसपास से गुजरना कोई बड़ी बात नहीं है, लेकिन एरे और डेटा की वस्तुओं के लिए आपको शायद वेब स्टोरेज या कुकीज़ का उपयोग करना चाहिए। जबकि विवरण ब्राउज़रों में थोड़ा भिन्न होता है, URI की लंबाई की व्यावहारिक सीमा लगभग 2000 वर्ण होती है
वेब भंडारण
एचटीएमएल 5 की शुरुआत के साथ हमें वेब स्टोरेज भी मिला, जो आपको पेज लोड के ब्राउज़र में जानकारी को सहेजने की अनुमति देता है। वह है localStorage
जो लंबी अवधि के लिए डेटा को बचा सकता है (जब तक उपयोगकर्ता इसे मैन्युअल रूप से साफ़ नहीं करता है) और sessionStorage
जो आपके वर्तमान ब्राउज़िंग सत्र के दौरान ही डेटा बचाता है। उत्तरार्द्ध आपके लिए यहां उपयोगी है, क्योंकि आप उपयोगकर्ता को बाद में वापस आने पर "क्लिक" सेट को सही नहीं रखना चाहते हैं।
यहां मैंने बटन क्लिक इवेंट पर स्टोरेज सेट किया है, लेकिन आप इसे सबमिट या कुछ और बनाने के लिए भी बांध सकते हैं।
$('input[type="submit"][value="Search"]').click(function() {
sessionStorage.setItem('clicked', 'true');
});
जब आप पृष्ठ को लोड करते हैं, तो आप यह जांच सकते हैं कि क्या यह इस का उपयोग कर सेट है:
var clicked = sessionStorage.getItem('clicked');
भले ही यह मान इस ब्राउज़िंग सत्र के दौरान सहेजा गया हो, फिर भी यह संभव हो सकता है कि आप इसे पहले रीसेट करना चाहते हैं। ऐसा करने के लिए, उपयोग करें:
sessionStorage.removeItem('clicked');
यदि आप JS ऑब्जेक्ट या एरे को सेव करना चाहते हैं, तो आपको उसे स्ट्रिंग में बदलना चाहिए। युक्ति के अनुसार यह अन्य डेटाटिप्स को बचाने के लिए संभव होना चाहिए, लेकिन यह अभी तक ब्राउज़रों में सही ढंग से लागू नहीं हुआ है।
localStorage.setItem('myObject', JSON.stringify(myObject));
var myObject = JSON.parse(localStorage.getItem('myObject'));
ब्राउज़र समर्थन बहुत बढ़िया है इसलिए आपको इसका उपयोग करने के लिए सुरक्षित होना चाहिए जब तक कि आपको वास्तव में पुराने / अस्पष्ट ब्राउज़र का समर्थन करने की आवश्यकता न हो। वेब संग्रहण भविष्य है।
कुकीज़
वेब संग्रहण का एक विकल्प कुकी में डेटा को सहेज रहा है। कुकीज़ मुख्य रूप से डेटा सर्वर-साइड पढ़ने के लिए बनाई जाती हैं, लेकिन इसका उपयोग विशुद्ध रूप से क्लाइंट-साइड डेटा के लिए भी किया जा सकता है।
आप पहले से ही jQuery का उपयोग करते हैं, जो कुकीज़ को काफी आसान बनाता है। दोबारा, मैं click
यहां कार्यक्रम का उपयोग करता हूं, लेकिन कहीं भी उपयोग किया जा सकता है।
$('input[type="submit"][value="Search"]').click(function() {
$.cookie('clicked', 'true', {expires: 1});
});
फिर पेज लोड पर आप कुकी को इस तरह पढ़ सकते हैं:
var clicked = $.cookie('clicked');
जैसा कि कुकीज़ आपके मामले में सत्रों के दौरान बनी रहती हैं, जैसे ही आपको इसके साथ जो भी करने की आवश्यकता होती है, आपको उन्हें परेशान करना होगा। आप नहीं चाहेंगे कि उपयोगकर्ता एक दिन बाद वापस आए और फिर भी clicked
सही पर सेट हो।
if(clicked === "true") {
$.cookie('clicked', null);
}
(कुकीज़ को सेट / पढ़ने का एक गैर-jQuery तरीका यहीं पाया जा सकता है )
मैं व्यक्तिगत रूप से क्लिक की गई स्थिति को याद रखने के लिए कुछ सरल के लिए कुकी का उपयोग नहीं करूंगा, लेकिन यदि क्वेरी स्ट्रिंग कोई विकल्प नहीं है और आपको वास्तव में पुराने ब्राउज़रों का समर्थन करने की आवश्यकता है जो सेशनस्टोरेज का समर्थन नहीं करते हैं तो यह काम करेगा। आपको पहले सेशनस्टोरेज के चेक के साथ इसे लागू करना चाहिए, और केवल अगर यह विफल रहता है तो कुकी विधि का उपयोग करें।
window.name
हालांकि यह मेरे लिए एक हैक की तरह लगता है जो शायद लोकलस्टोरेज / सेशनस्ट्रेज से पहले उत्पन्न हुआ था, आप window.name
संपत्ति में जानकारी स्टोर कर सकते हैं:
window.name = "my value"
यह केवल तारों को संग्रहीत कर सकता है, इसलिए यदि आप किसी ऑब्जेक्ट को सहेजना चाहते हैं, तो आपको इसे उपरोक्त localStorage
उदाहरण की तरह ही कड़ा करना होगा :
window.name = JSON.stringify({ clicked: true });
मुख्य अंतर यह है कि इस जानकारी को न केवल पृष्ठ ताज़ा बल्कि विभिन्न डोमेन पर भी रखा जाता है। हालाँकि, यह उस वर्तमान टैब तक ही सीमित है, जिसमें आप हैं।
इसका मतलब है कि आप अपने पृष्ठ पर कुछ जानकारी सहेज सकते हैं और जब तक उपयोगकर्ता उस टैब में रहता है, तब तक आप उसी जानकारी तक पहुंच सकते हैं, भले ही वह किसी अन्य वेबसाइट पर वापस आ गया हो। सामान्य तौर पर, मैं इसका उपयोग करने के खिलाफ सलाह दूंगा जब तक आपको वास्तव में एकल ब्राउज़िंग सत्र के दौरान क्रॉस-डोमेन जानकारी संग्रहीत करने की आवश्यकता न हो।