alex: variablen aus url auslesen

guten morgen allerseits,

ich hab im vorfeld mal die archive durchwühlt, und hab auch ansatzweise lösungen gefunden die in die selbe richtung gehn, anscheinend sind meine javascript kenntnisse jedoch leider nicht ausreichend um selbst auf die lösung zu kommen.

zum problem:

ein mapserver generiert mir ein bild (kartenausschnitt). von diesem bild sollen nun bei jedem klick in das bild die x und y koorinaten (siehe url) in ein array (bzw. arrayX und arrayY ?) gespeichert werden.
wie kann ich aus einer url ( sieht nach einem klick ins bild z.b. so aus--> http://devel.grid-it.at/alex/index_html?x=292&y=197) vorhin angesprochene koordinaten per javascript weiterverarbeiten?
das bild wurde von mir im vorfeld über ein <form> </form> ins html eingebunden.

vielen dank schon mal für eure bemühungen,

alex

  1. Hallo alex,

    du benötigst
    http://de.selfhtml.org/javascript/objekte/location.htm#search
    um an die Parameter zu kommen,
    http://de.selfhtml.org/javascript/objekte/string.htm#substring
    um das ? zu entfernen,
    http://de.selfhtml.org/javascript/objekte/string.htm#substring
    um den Rest erst beim & und danach beim = zu trennen.

    Gruß, Jürgen

    1. du benötigst
      http://de.selfhtml.org/javascript/objekte/location.htm#search
      um an die Parameter zu kommen,

      als ich hab jetzt sämtlichen inhalt nach dem ? übernommen und mal in eine variable geschrieben

      http://de.selfhtml.org/javascript/objekte/string.htm#substring
      um das ? zu entfernen,

      mein problem hierbei ist daß ich verschiedene "zehner-stelligkeiten" bei den koordinatenpaaren habe (bsp.:x=3/y=345, x=143/y=2, x=1023/y=34 usw.).
      daraus resultierend weiß ich jetzt nicht wie ich die zeichenkette automatisch immer passend aufsplitten kann....wäre es möglich einfach zwischen dem "x" und dem "&" das "=" zu streichen und die resttliche kette zu übernehmen ( und für y wert halt einfach alles nach dem 2. "=")? ----> ?x=258&y=201

      1. Hi,

        daraus resultierend weiß ich jetzt nicht wie ich die zeichenkette automatisch immer passend aufsplitten kann...

        replace() von ",", split() am " ", split() am "/", split() am "=", ...

        Gruß, Cybaer

        --
        Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
        1. replace() von ",", split() am " ", split() am "/", split() am "=",

          naja, daß ich kein programmier-experte bin solltest ja schon gemerkt haben, ich werd mich da mal reinhängen...mal sehn was dabei rauskommt - ansonsten muss ich halt leider nochmal lästig sein - danke für deine hilfe

          alex

          1. Hi,

            replace() von ",", split() am " ", split() am "/", split() am "=",
            naja, daß ich kein programmier-experte bin solltest ja schon gemerkt haben, ich werd mich da mal reinhängen...

            Quickbar->JavaScript->split()
            Und das einfach solange, bis alles zerbröselt ist. ;-)

            Und das ggf. in einer Schleife, deren Ende man für jeweilige Array mittels length abfragen kann (der letzte existente Array-Eintrag ist halt length-1).

            mal sehn was dabei rauskommt - ansonsten muss ich halt leider nochmal lästig sein

            Kein Problem. =:-)

            Gruß, Cybaer

            --
            Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
            1. Hi,

              replace() von ",", split() am " ", split() am "/", split() am "=",

              habs jetzt mal so probiert:

              :::::::::::::::

              <script language="javascript">
              function koord() {
                var extrakt = (window.location.search);
                var extrakt2 = extrakt.split("&");
                var x1 = extrakt2[0];
                var y1 = extrakt2[1];
                var x1_1 = x1.split("=");
                var xlast=x1_1[1];
                var y1_1 =y1.split("=");
                var ylast=y1_1[1];

              document.write(ylast); <br>
                document.write(ylast);
              }
              </script>

              ::::::::::::::

              warum gibt er mir keine x/y werte aus sobald ich das 2. document.write anhänge? wenn ich document.write(ylast) weglasse funktioniert das wunderbar

              danke, alex

              1. Hi,

                ich habe es nicht getestet, aber ...

                document.write(ylast); <br>

                ... <br> ist HTML, kein JavaScript. Du darfst das aber auch gerne mit write() ausgeben. =;-)

                Gruß, Cybaer

                --
                Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
                1. Hi,

                  ich habe es nicht getestet, aber ...

                  document.write(ylast); <br>

                  ... <br> ist HTML, kein JavaScript. Du darfst das aber auch gerne mit write() ausgeben. =;-)

                  hab auch vorher schon versucht das JS nach dem ersten document.write zu schließen, danach das break zu setzen, dannn wieder js auf und das 2. document.write abzusetzen...fehlanzeige.
                  wie macht man das im js teil, wenn man 2 ausgaben untereinander haben will...also quasi html <br> bzw. <p> ?

                  ...bin auch grad auf document.writeln gestossen...aber den zeilenumbruch  macht er mir da auch nicht

                  thx, alex

                  1. Hi,

                    wie macht man das im js teil, wenn man 2 ausgaben untereinander haben will...also quasi html <br> bzw. <p> ?

                    write(xlast+"<br"+ylast);

                    oder

                    write(xlast);
                    write("<br>");
                    write(ylast);

                    Wobei letzteres auf dem Opera überdurchschnittlich länger dauert.

                    ...bin auch grad auf document.writeln gestossen...aber den zeilenumbruch  macht er mir da auch nicht

                    Doch, den sieht man in HTML nur i.d.R. nicht. Man kann ihn innerhalb von <pre></pre> begutachten.

                    Gruß, Cybaer

                    --
                    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
                    1. write(xlast);
                      write("<br>");
                      write(ylast);

                      habs dann auch bemerkt dass mir im js vor dem html tag die "" fehlen, danke für den hinweis

                      unter http://fluid.devcon.cc/grid/test.htm sieht man jetzt mal was bisher da ist - jetzt muß ich das ganze halt noch irgendwie hinkriegen daß bei jedem klick die x/y koordinaten in ein array (oder was anderes?) gehn und dann per submit verschickt werden.

      2. mein problem hierbei ist daß ich verschiedene "zehner-stelligkeiten" bei den koordinatenpaaren habe (bsp.:x=3/y=345, x=143/y=2, x=1023/y=34 usw.).
        daraus resultierend weiß ich jetzt nicht wie ich die zeichenkette automatisch immer passend aufsplitten kann....wäre es möglich einfach zwischen dem "x" und dem "&" das "=" zu streichen und die resttliche kette zu übernehmen ( und für y wert halt einfach alles nach dem 2. "=")? ----> ?x=258&y=201

        z.b. so:

          
        <script type="text/javascript">  
          
        var pairs = unescape( window.location.search.substring(1) ).split('&');  
        var params = new Object();  
          
        for(var param in pairs)  
        {  
        var tmp = pairs[param].split('=');  
        params[tmp[0]] = tmp[1];  
        }  
          
        for(var name in params)  
        {  
        alert( name + '=' + params[name]);  
        }  
        </script>  
          
        
        

        Struppi.

        1. z.b. so:

          <script type="text/javascript">

          var pairs = unescape( window.location.search.substring(1) ).split('&');
          var params = new Object();

          for(var param in pairs)
          {
          var tmp = pairs[param].split('=');
          params[tmp[0]] = tmp[1];
          }

          for(var name in params)
          {
          alert( name + '=' + params[name]);
          }
          </script>

          
          > Struppi.  
            
            
          ich glaub ich brauch noch ein wenig bis ich da durchsteig...aber danke auf jeden fall
          
          1. Naja, ist eigtnlich ganz simpel.

            var pairs = unescape( window.location.search.substring(1) ).split('&');

            Du musst sowas von innen nach außen lesen:

            window.location.search ist klar
            window.location.search.substring(1) schneidet das erste Zeichen (das Fragezeichen) ab

            unescape( .... )
            unescape()
            (Mittlerweile besser decodeURI() verwenden)

            unescape().split('&')

            Nachdem ale Zeichen umgewandelt sind kannst du den search String splitten. Jetzt hast du ein Array mit z.b. solchen Werten 'x=der Wert x', 'y=der Wert y', ....

            var params = new Object();

            dieses Object nimmt die Parameter auf, du kannst der Variabel params jetzt Attribute zuweisen.

            z.b.
            params.eineEigenschaft = 1;
            oder
            params['eineEigenschaft'] = 1;

            Ausgabe in beiden Fällen: alert(params.eineEigenschaft);

            for(var param in pairs)
            {

            Das ist Faulheit und kann auch so umgesetzt werden:

            for(var param = 0; param < pairs.length; param++)

            (Wobei man dann üblicherweise statt param z.b. i verwenden würde)

            var tmp = pairs[param].split('=');

            hier werden die Werte des Array gesplittet.
            tmp[0] enthält die Variabel
            tmp[1] den Wert

            params[tmp[0]] = tmp[1];

            jetzt hast du z.b.
            params.x = 'der Wert x'
            params.y = 'der Wert y'

            }

            for(var name in params)
            {
            alert( name + '=' + params[name]);
            }

            Mit dieser Schleife kannst du alle empfangenen Werte ausgeben.

            Mehr Hinweise dazu
            http://de.selfhtml.org/javascript/objekte/array.htm#assoziative_arrays

            Struppi.

            1. Hi,

              unescape().split('&')

              Umgekehrt. Erst splitten, dann die Kodierung aufheben.

              bla=x%26co%3Ddummy&blubb=sabbel

              ergibt nach Deiner Methode

              bla=x
              co=dummy
              blubb=sabbel

              müßte aber

              bla=x&co=dummy
              blubb=sabbel

              ergeben.

              Nachdem ale Zeichen umgewandelt sind kannst du den search String splitten.

              Nein, es muß erst gesplittet werden, dann umgewandelt.
              Das gilt sowohl für das & als auch für das =.

              Andernfalls würden codierte Trennzeichen beim Splitten verwendet.

              cu,
              Andreas

              --
              Warum nennt sich Andreas hier MudGuard?
              Schreinerei Waechter
              Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
              1. Nein, es muß erst gesplittet werden, dann umgewandelt.
                Das gilt sowohl für das & als auch für das =.

                Andernfalls würden codierte Trennzeichen beim Splitten verwendet.

                Wenn man nicht alles überprüft - müssen es andere amchen ;-)

                <script type="text/javascript">  
                  
                var pairs = window.location.search.substring(1).split('&');  
                var params = new Object();  
                  
                for(var param in pairs)  
                {  
                var tmp = unescape( pairs[param] ).split('=');  
                params[tmp[0]] = tmp[1];  
                }  
                  
                for(var name in params)  
                {  
                alert( name + '=' + params[name]);  
                }  
                </script>  
                
                

                Struppi.

                1. hallo,

                  was hältsts du/ihr von dieser variante? --> http://fluid.devcon.cc/grid/test.htm

                  alex

  2. Hallo Alex,

    wie kann ich aus einer url ( sieht nach einem klick ins bild z.b. so aus--> http://devel.grid-it.at/alex/index_html?x=292&y=197) vorhin angesprochene koordinaten per javascript weiterverarbeiten?

    In dem Du die URI durchsuchst mit search()
    Das liefert Dir alles ab dem ? (sprich: Fragezeichen) in Deiner URI. Nun musst Du nur noch X und Y, also die Variablen, rauslöse aus dem String. Auf die Schnelle würde ich am & split'en und mit substr die Parameter raus lösen.

    Mit freundlichem Gruß
    Micha

  3. hallo,

    danke erstmal für die rasche hilfe...werd mal sehn ob ich das hinbekomm.

    gruß, alex