Ralf: Indirekte Wertzuweisung an Variablen

Hallo!

In einem Cookie haben ich einen String nach folgendem Muster vorliegen:
name1=wert1&name2=wert2&name3=wert3&...

Nun möchte ich Variablen mit den entsprechenden Werten belegen.

Von mir angedacht ist, den o.a. String mit split("&") aufzuteilen, die einzelnen Elemente dann widerum mit split("=") zu teilen und mit eval() zuzuweisen.

Ist das die einzige Möglichkeit oder geht es ggf. auch einfacher/besser/eleganter?

Ralf

  1. Hi,

    Von mir angedacht ist, den o.a. String mit split("&") aufzuteilen, die einzelnen Elemente dann widerum mit split("=") zu teilen und mit eval() zuzuweisen.

    wieso möchtest Du eval() anwenden? Noch dazu mit von vertrauensunwürdiger Quelle stammenden Daten?

    Ist das die einzige Möglichkeit oder geht es ggf. auch einfacher/besser/eleganter?

    Abgesehen vom Verzicht auf eval(), welches _erheblich_ eleganter, besser und vermutlich auch einfacher ist: Nein, ich schätze nicht.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Moin!

      wieso möchtest Du eval() anwenden?

      Weil ich keine andere Lösung gefunden habe. Und weil es mir nicht besonders behagt, habe ich hier gefragt.

      Noch dazu mit von vertrauensunwürdiger Quelle stammenden Daten?

      Woher willst du das wissen? ICH habe den Cookie gesetzt und mir vertraue ich schon ;)

      Es geht darum, eine Liste von Werten zwischenzuspeichern und beim nächsten Aufruf wieder zu setzen. Und ich habe keine Lust, die Routine für das Einlesen jedes Mal zu ändern, wenn ein Wert hinzukommt oder wegfällt.

      Nein, ich schätze nicht.

      Danke.

      Ralf

      1. Hallo Ralf,

        Weil ich keine andere Lösung gefunden habe. Und weil es mir nicht besonders behagt, habe ich hier gefragt.

        Noch dazu mit von vertrauensunwürdiger Quelle stammenden Daten?

        Du benötigst wirklich kein eval() dazu, denn die methode split() gibt ein Datenfeld zurück, das Du in einer Variable abspeichern kannst.

        Woher willst du das wissen? ICH habe den Cookie gesetzt und mir vertraue ich schon ;)

        Es ist denkbar, wenngleich unwahrscheinlich, daß vom Browser angelieferte cookies manipuliert werden können. Passieren, wie bei anderen Sprachen, kann aber eher wenig.

        Es geht darum, eine Liste von Werten zwischenzuspeichern und beim nächsten Aufruf wieder zu setzen. Und ich habe keine Lust, die Routine für das Einlesen jedes Mal zu ändern, wenn ein Wert hinzukommt oder wegfällt.

        Nutzt Du wie oben kurz dargelegt eine Datenfeld, hättest Du die Möglichkeit mittels for() alle Werte anzusprechen.

        Gruß aus Berlin!
        eddi

        --
        Wer Rechtschreibfehler findet, darf sie behalten.
        1. Hallo eddi,

          ich verwende split() und for() bereits in meiner Routine, wüsste aber nicht, wie ich OHNE eval() zum Ziel kommen kann.

          Daher will ich mal konkret werden:

          Ich habe als Cookie folgenden String abgelegt:
          NH=3&NV=4&SH=70&SV=74&DH=0&DV=0

          Ich möchte erreichen, dass folgende Zuweisungen getroffen werden, als wenn ich es im Programm schreiben würde:
          NH="3"; NV="4"; SH="70"; SV="74"; DH="0"; DV="0";

          Wie kann ich das nun OHNE eval() bewerkstelligen?

          Mein Ansatz war:
          cookie="NH=3&NV=4&SH=70&SV=74&DH=0&DV=0";
          a=cookie.split("&");
          for (var i=0; i<a.length; i++){
            b=a[i].split("=");
            eval(b[0]+"='"+b[1]+"'");}

          Ralf

          1. Re:

              
            cookie="NH=3&NV=4&SH=70&SV=74&DH=0&DV=0";  
            a=cookie.split("&");  
            for (i=0; i<a.length; i++){  
               b=a[i].split("=");  
               window[b[0]]=b[1];  
            }  
            
            

            Gruß aus Berlin!
            eddi

            --
            Wer Rechtschreibfehler findet, darf sie behalten.
            1. Du bist mir Sekunden zuvorgekommen ;)

              Dank Siechfred's Tipp habe ich gerade exakt die gleiche Lösung genommen und es ausprobiert.

              Auch dir vielen Dank und ein schönes WE,

              Ralf

  2. Tag Ralf.

    In einem Cookie haben ich einen String nach folgendem Muster vorliegen:
    name1=wert1&name2=wert2&name3=wert3&...
    Nun möchte ich Variablen mit den entsprechenden Werten belegen.

    Eine Möglichkeit habe ich unter Zerlegen des Querystrings in Name/Werte-Paare beschrieben. Der Funktion kannst du auch statt window.location.search jeden beliebigen gleich aufgebauten String übergeben, lediglich die Anwendung von slice() brauchst du nicht. Eventuell ist auch decodeURI() unnötig, das kommt auf deine Ausgangsdaten an. Willst du die Name/Werte-Paare nicht in einem eigenen Objekt speichern, kannst du die Zuweisung auch direkt via window[name] = wert machen. Ich persönlich bevorzuge in diesem Zusammenhang jedoch die objektorientierte Vorgehensweise, da es so nicht zu Konflikten zwischen reservierten Wörtern, vor- bzw. selbstdefinierten Funktionen oder bereits vergebenen Variablennamen kommen kann.

    Siechfred