2015-01-04 8 views
7

Ich habe zwei Seiten - "Seite 1" und "Seite 2". Auf Seite 1 gibt es eine Textbox mit einem Wert von z.B. 100 und ein Knopf am Ende.Übergabe der Variablen durch JavaScript von einer HTML-Seite zu einer anderen Seite

Durch drücken der Schaltfläche Ich möchte Javascript den Wert des Textfelds in einer globalen (?) Variable speichern und auf Seite 2 springen. Mit "window.onload" möchte ich eine zweite Javascript-Funktion, um den gespeicherten Wert zu alarmieren Seite 1.

Hier ist mein Javascript-Code:

<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); 

} 

On "Seite 1" Ich habe diese send-Button mit:

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

Es beginnt die Javascript Funktion und Redi rectus mich korrekt auf meine Seite2.

Aber mit dieser ont die zweite Seite:

window.onload=read_price(); 

ich immer ein „undefiniert“ Wert der globalen Variablen Preis.

Ich habe viel über diese globalen Variablen gelesen. Z.B. auf dieser Seite: Problem with global variable.. Aber ich kann es nicht funktionieren ...

Warum funktioniert das nicht?

+0

Sie haben missverstanden, was "globale Variablen" in JavaScript im Browser sind. Sie sind immer noch an die Seite gebunden, in der sie gesetzt wurden, sie existieren nicht auf anderen Seiten. – CBroe

+0

globale Variablen sind nur global auf der Seite. Vielleicht werfen Sie einen Blick auf URL-Parameter http://stackoverflow.com/questions/979975/how-to-get-the-value-from-url-parameter? – nha

+0

@CBroe (und nha) Danke! Wusste nicht, dass sie immer noch an die Seite gebunden waren. Ich denke, sie sind "wirklich" global (gültig für alle Webseiten) – Kronwied

Antwort

15

Ohne Ihren Code aber nur Ihr Szenario zu lesen, würde ich lösen, indem Sie localStorage verwenden. Hier ist ein Beispiel, ich verwende prompt() für kurz.

auf Seite1:

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

Auf page2:

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

Sie auch Cookies verwenden, können aber local ermöglicht viel mehr Räume, und sie sind nicht zurück an Server gesendet, wenn Sie Seiten anfordern .

+1

Dies ist eine gute Lösung, aber Sie haben nicht erklärt, warum Sie dies verwenden sollten. Das OP versteht keine globalen Variablen in JS. – ColBeseder

+0

@potasmic Danke. Eine wirklich großartige und einfache Lösung. :) Muss ich (wie LiamB gesagt hat) eine grundlegende Sicherheit mit dieser Lösung in Betracht ziehen? – Kronwied

+0

@ ColBeseder, Kronied: localStorage ist per-Domäne. Andere Websites können nur dann auf Ihre localStorage zugreifen, wenn Sie andere Skripts aus anderen Quellen (z. B. Google Analytics) hinzugefügt haben. sessionStorage läuft ab, wenn Sie die Registerkarte schließen. Cookies haben eine kürzere Ablaufzeit als localStorage. Wenn Daten jedoch vertrauliche Informationen enthalten, sollten Sie in ein Backend-Austauschschema statt direkt in den Browser investieren, das Benutzer anzeigen, bearbeiten usw. können (genau wie Cookies) – potasmic

4

Die beste Option ist hier, den Query String zu verwenden, um den Wert zu senden.

how to get query string value using javascript

  • So Seite 1 bis page2.html umleitet? Somevalue = ABC
  • Page 2 kann dann lesen Sie die Query-String und speziell den Schlüssel 'somevalue'

Wenn diese ist alles mehr als eine Lernübung, die Sie vielleicht die Sicherheitsimplikationen davon berücksichtigen möchten.

Globale Variablen werden Ihnen hier nicht helfen, denn sobald die Seite neu geladen ist, werden sie zerstört.

0

Sie haben ein paar verschiedene Möglichkeiten:

  • Sie einen SPA-Router wie SammyJS verwenden oder AngularJS und ui-Router, so dass Ihre Seiten Stateful sind.
  • Verwenden Sie sessionStorage, um Ihren Status zu speichern.
  • Speichern Sie die Werte im URL-Hash.
+0

@ LiamB macht einen sehr guten Punkt. Meine und meine Vorschläge haben eine Sicherheitsimplikation, bei der Werte vom Benutzer außerhalb der Anwendung geändert werden können: entweder durch Ändern der Querystring-Parameter, Hash-Parameter, localStorage-Daten oder auf andere Weise. Sie sollten die Validierung immer auf Ihrem Back-End-Dienst der Daten durchführen. – Martin