2015-01-04 3 views
7

मेरे पास दो पृष्ठ हैं - "पृष्ठ 1" और "पृष्ठ 2"। पृष्ठ 1 पर उदाहरण के साथ एक टेक्स्ट-बॉक्स है 100 और अंत में एक बटन।एक HTML पृष्ठ से दूसरे पृष्ठ पर जावास्क्रिप्ट के माध्यम से परिवर्तनीय पास

बटन दबाकर मैं जावास्क्रिप्ट को वैश्विक (?) चर में टेक्स्टबॉक्स के मान को सहेजने और पेज 2 पर कूदने के लिए चाहता हूं। "Window.onload" के साथ मैं सहेजे गए मान को अलर्ट करने के लिए एक दूसरा जावास्क्रिप्ट-फ़ंक्शन चाहता हूं पृष्ठ 1।

<input class="button_send" id="button_send" type="submit" value="Submit_price" onclick="save_price();"/> 

यह शुरू होता है:

<script type="text/javascript"> 

var price; //declare outside the function = global variable ? 

function save_price(){ 

    alert("started_1"); //just for information 

    price = document.getElementById('the_id_of_the_textbox').value; 

    alert(price); //just for information   
} 

<script type="text/javascript"> 

function read_price(){ 

    alert("started_2"); 

    alert(price); 

} 

पर "पेज 1" मैं के साथ इस भेजने-बटन है:

यहाँ मेरी जावास्क्रिप्ट कोड है जावास्क्रिप्ट फ़ंक्शन और रेडी मुझे मेरे पेज 2 पर सही ढंग से बदलता है।

window.onload=read_price(); 

मैं हमेशा वैश्विक चर मूल्य का एक "अनिर्धारित" मूल्य प्राप्त:

लेकिन इस के साथ दूसरे पेज ont।

मैंने उन वैश्विक चर के बारे में बहुत कुछ पढ़ा है। जैसे इस पृष्ठ पर: Problem with global variable.. लेकिन मैं इसे काम नहीं कर सकता ...

यह क्यों काम नहीं कर रहा है?

+0

आपने गलत समझाया कि ब्राउज़र में जावास्क्रिप्ट में "वैश्विक चर" क्या हैं। वे अभी भी उस पृष्ठ से बंधे हैं जो वे सेट किए गए थे, वे अन्य पृष्ठों में मौजूद नहीं हैं। – CBroe

+0

वैश्विक चर पृष्ठ के लिए केवल वैश्विक हैं। हो सकता है कि यूआरएल पैरामीटर पर एक नज़र डालें http://stackoverflow.com/questions/979975/how-to-get-the-value-from-url-parameter? – nha

+0

@ सीब्रो (और नाहा) धन्यवाद! नहीं पता था कि वे अभी भी पृष्ठ से बंधे थे। मुझे लगता है कि वे "वास्तविक" वैश्विक हैं (सभी वेबपृष्ठों के लिए मान्य) – Kronwied

उत्तर

15

अपना कोड पढ़ने के बिना, लेकिन बस आपके परिदृश्य के बिना, मैं localStorage का उपयोग कर हल कर दूंगा। यहां एक उदाहरण है, मैं संक्षिप्त के लिए prompt() का उपयोग करूंगा।

पृष्ठ 1 पर:

window.onload = function() { 
    var getInput = prompt("Hey type something here: "); 
    localStorage.setItem("storageName",getInput); 
} 

पृष्ठ 2 पर:

window.onload = alert(localStorage.getItem("storageName")); 

तुम भी कुकीज़ का उपयोग कर सकते हैं लेकिन localStorage और अधिक रिक्त स्थान की अनुमति देता है, और वे आप पृष्ठों का अनुरोध करते हैं सर्वर को वापस नहीं भेजा जाता है ।

+1

यह एक अच्छा समाधान है, लेकिन आपने यह समझाया नहीं है कि आपको इसका उपयोग क्यों करना चाहिए। ओपी जेएस में वैश्विक चर को समझ में नहीं आता है। – ColBeseder

+0

@ पोटस्मिक धन्यवाद। एक असली महान और आसान समाधान। :) क्या मुझे इस समाधान के साथ कुछ बुनियादी सुरक्षा (जैसा कि लिआमबी ने कहा) पर विचार करना है? – Kronwied

+0

@ कोल्बसेडर, क्राउनएड: लोकल स्टोरेज प्रति डोमेन है। अन्य साइटें आपके स्थानीय स्टोरेज तक नहीं पहुंच सकती हैं जब तक कि आपने अन्य स्रोतों (उदाहरण के लिए, Google Analytics) से अन्य स्क्रिप्ट शामिल नहीं की हैं। जब आप टैब बंद करते हैं तो sessionStorage समाप्त हो जाता है। कुकीज स्थानीय स्टोरेज की तुलना में कम समाप्ति समय है। हालांकि, यदि डेटा में संवेदनशील जानकारी है, तो आपको ब्राउजर में सही स्टोर करने के बजाय बैक-एंड एक्सचेंजिंग स्कीम में निवेश करना चाहिए, जो उपयोगकर्ता देख सकते हैं, संपादित कर सकते हैं, आदि (कुकीज़ की तरह) – potasmic

4

यहां आपका सबसे अच्छा विकल्प, मूल्य भेजने के लिए क्वेरी स्ट्रिंग का उपयोग करना है। 2

how to get query string value using javascript

  • तो पेज 1 page2.html पर रीडायरेक्ट? SomeValue = एबीसी
  • पृष्ठ तो कर सकते हैं पढ़ क्वेरी स्ट्रिंग और विशेष रूप से कुंजी 'someValue'

इस हैं एक सीखने के अभ्यास से कहीं ज्यादा कुछ है जो आप इस के सुरक्षा प्रभावों पर विचार करना चाह सकते हैं।

ग्लोबल वैरिएबल यहां आपकी सहायता नहीं करेंगे क्योंकि एक बार पेज फिर से लोड हो जाने पर वे नष्ट हो जाते हैं।

0

आप कुछ भिन्न विकल्प हैं:

  • आप SammyJS, या AngularJS और ui रूटर की तरह एक स्पा रूटर उपयोग कर सकते हैं, इसलिए आपके पृष्ठों स्टेटफुल हैं।
  • सत्र का उपयोग अपने राज्य को स्टोर करने के लिए स्टोरेज।
  • यूआरएल हैश पर मूल्यों को स्टोर करें।
+0

@ LiamB एक बहुत अच्छा मुद्दा बनाता है। मेरे सुझावों के साथ-साथ उनके पास एक सुरक्षा निहितार्थ है जहां उपयोगकर्ता द्वारा एप्लिकेशन के बाहर मूल्यों को बदला जा सकता है: या तो क्वेरीस्ट्रिंग पैरामीटर, हैश पैरामीटर, लोकल स्टोरेज डेटा या अन्य माध्यमों को बदलकर। आपको हमेशा डेटा की अपनी बैकएंड सेवा पर सत्यापन करना चाहिए। – Martin

संबंधित मुद्दे