Enrico: PHP/jQuery: übergebene Variablen werden scheinbar ignoriert

Hallo,

bitte entschuldigt, dass ich euch schon wieder bemühen muss, aber scheinbar werden die von PHP an Javascript übergebene Variablen ignoriert.

Ich fange am Besten ganz von Vorne an:

-----------------
Datei "Index.php"
-----------------

Diese Datei ist die zentrale Datei unseres Online-Shops.

[1] Dynamische Erzeugung der jeweils benötigten Variablen, je nach dem welche Inhalte gerade angezeigt werden bzw. angezeigt werden sollen (Texte, Fotos, Sortiment als Übersicht, Artikeldetails,...)
[2] Einbindung der externen JavaScript-Datei "Menues.js", die über die Funktion "Navigation" [3] das Haupt- und, falls verfügbar, auch das zugehörige Untermenü aufbaut
[3] Aufruf der Funktion "Navigation"

  
<?php  
session_start();  
  
   if (extension_loaded ("zlib") && strstr ($_SERVER["HTTP_ACCEPT_ENCODING"], "gzip"))  
   {  
      @ob_start ("ob_gzhandler");  
   }  
  
   include ('PHP/Session.php');  
  
?>
<html>  
   <head>  
      <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">  
      <link type="text/css" href="CSS/Reset.css" rel="stylesheet" media="screen" />  
      <link type="text/css" href="CSS/Aufbau.css" rel="stylesheet" media="screen" />  
      <script type="text/javascript" src="JS/Console.js"></script>  
      <script type="text/javascript" src="JS/jQuery.js"></script>  
  
   </head>  
   <body>  

~~~~~~javascript
  
      <script type="text/javascript">  

~~~~~~php
  
         <?php  
  
[1]         include ('PHP/Parameter.php');  
  
         ?>  

~~~~~~javascript
  
         $(document).ready(function()  
         {  
            $(window).load(function()  
            {  
[2]            $.getScript('JS/Menues.js',function()  
               {  
[3]               Navigation (AuswahlHauptmenue, AuswahlUntermenue);  
               });  
            });  
         });  

~~~~~~html
  
      </script>  
      <form id="Sidebar">  
         <input name="AuswahlHauptmenue" value="0">  
         <input name="AuswahlUntermenue" value="0">  

...Ausgabe der Menüs...~~~html

</form>

  
  
  
\---------------------  
Datei "Parameter.php"  
\---------------------  
  
[4] Sofern die jeweilige Variable besteht oder nicht leer ist,...  
[5] ...dann gib den Namen und den Inhalt aus.  
  
[6] Ansonsten, aber nur, wenn es sich hierbei um die Variablen "AuswahlHauptmenue" oder "AuswahlUntermenue" handelt,...  
[7] ...gib den Namen aus und belege sie mit 0, d.h. alle anderen möglichen Variablen wurden nicht gesendet, weil sie derzeit noch nicht benötigt werden  
  
Schritt 7 deshalb, damit ich einen Ausgangspunkt beim ersten Aufrufen unseres Onlie-Shops habe.  
~~~php
  
<?php  
  
   $Parameter = array ('AuswahlHauptmenue', 'AuswahlUntermenue', 'Aktion', 'Bildnummer', 'Bezeichnung', ...weitere mögliche Variablen...);  
  
   $AnzahlElemente = count ($Parameter);  
  
   for ($i = 0; $i < $AnzahlElemente; $i++)  
   {  
[4]   if (array_key_exists ($Parameter[$i], $_POST) || !empty ($_POST[$Parameter[$i]]))  
      {  
[5]      echo $Parameter[$i] . ' = ' . $_POST[$Parameter[$i]] . ';';  
      }  
      else  
      {  
[6]      if ($i == 0 || $i == 1)  
         {  
[7]         echo $Parameter[$i] . ' = 0;';  
         }  
      }  
   }  
  
?>  

----------------
Datei "Menue.js"
----------------

Den Code beschränke ich nachfolgend auf das eigentliche Abschicken des Formulares, da der Aufbau von Haupt- und Untermenü funktioniert, sobald ich die Werte hart eingebe.

[8]  Das Formular "Sidebar" wird entweder durch Aklicken eines Hauptmenüpunktes oder eines Untermenüpunktes, sofern ein Untermenü vorhanden ist, abgeschickt
[9]  Vor dem Abschicken werden die Werte der (später versteckten) Textfelder zu einem String zusammengesetzt
[10] Beim Abschicken des Formulares wird das ursprüngliche Verhalten unterbunden, damit es zu keinem Reload der Seite kommt

  
[8]   $('div.ButtonHauptmenue, div.ButtonUntermenue').click(function()  
      {  
[9]      Daten = $('#Sidebar').serialize();  
  
[10]     $('#Sidebar').submit(function()  
         {  
            return false;  
         });  
  
         $.post("Index.php", function(Daten)  
         {  
            alert ("Daten geladen: " + Daten);  
         });  
      });  

Bis einschliesslich des Punktes [9] funktioniert alles bestens, lediglich die korrekte Übergabe bzw. Ermittlung der jeweiligen Werte der Variablen "AuswahlHauptmenue" und "AuswahlUntermenue" wird scheinbar ignoriert bzw. das Auslesen funktioniert nicht.

Ich hoffe, ihr könnt mir hier auch weiterhelfen.

"Same procedure as last time":
Danke und Gruß
Enrico

  1. Tach!

    aber scheinbar werden die von PHP an Javascript übergebene Variablen ignoriert.

    PHP kann keine Variablen an andere Systeme übergeben - höchstens Werte, die unter anderem in Variablen abgelegt sein können. In deinem Falle willst du konkret Javascript-Code mit PHP schreiben. Wenn du dabei ein Problem hast, musst du zuerst im Browser nachsehen, was dort ankommt (Quelltextansicht) und was dessen Fehlerkonsole zu beanstanden hat. denn der Browser führt ja den Javascript-Code nicht nach deinen Vorstellungen aus. Erst dann kannst du anfangen, nach der Ursache der fehlerhaften Javascript-Code-Erzeugung zu forschen.

    dedlfix.

    1. Hallo dedlfix,

      die (ausschnittsweise) Anzeige des Quelltextes nach dem ersten Aufruf sieht wie folgt aus:

        
      <body>  
         <script type="text/javascript">
      ~~~~~~javascript
        
            AuswahlHauptmenue = 0;AuswahlUntermenue = 0;  
            $(document).ready(function()  
            {  
               $(window).load(function()  
               {  
                  $.getScript('JS/Menues.js',function()  
                  {  
                     Navigation (AuswahlHauptmenue, AuswahlUntermenue);  
                  });  
               });  
            });
      ~~~~~~html
        
            </script>
      

      Der relevante JavaScript-Abschnitt zum Absenden des Formulares:

        
         $('div.ButtonHauptmenue, div.ButtonUntermenue').click(function()  
         {  
            Daten = $('#Sidebar').serialize();  
      
      

      [1]~~~javascript    alert (Daten);

      $('#Sidebar').submit(function()
            {
               return false;
            });

      $.post("Index.php", function(Daten)
            {

      [2]~~~javascript
            alert("Daten geladen: " + Daten);  
            });  
         });
      

      Die Fehlerconsole bringt keine Notiz, keine Warnung und keinen Fehler. Ebenso läuft das Script ganz normal durch.

      [1] Hier bekomme ich immer den richtig zusammengesetzten Querystring, je nach dem, was ich im Hauptmenü angeklickt habe, beispielsweise "AuswahlHauptmenue=3&AuswahlUntermenue=0".

      [2] Hier erhalte ich aber immer "AuswahlHauptmenue = 0;AuswahlUntermenue = 0;", egal was ich im Hauptmenü vorher angeklickt habe.

      Dies bedeutet, dass $_POST scheinbar nicht richtig ausgelesen wird.

      Nur: warum?

      Gruß,
      Enrico

      1. Tach!

        [2] Hier erhalte ich aber immer "AuswahlHauptmenue = 0;AuswahlUntermenue = 0;", egal was ich im Hauptmenü vorher angeklickt habe.
        Dies bedeutet, dass $_POST scheinbar nicht richtig ausgelesen wird.

        Ok, dann geht jetzt die Ursachensuche im PHP-Teil weiter. $_POST wird von PHP gefüllt. Dessen Inhalt kannst du mit print_r($_POST) kontrollieren. Für das "Auslesen" bist nur du zu zuständig, wobei das kein "Auslesen" sondern nur ein "Zugreifen" sein muss. Schau also nach, auf was du da zugreifst und verfolge diese Werte in deiner Verarbeitungskette durch Kontrollausgaben.

        dedlfix.

        1. Hallo dedlfix,

          Dessen Inhalt kannst du mit print_r($_POST) kontrollieren

          Hier erhalte ich nur die Ausgabe "Array()", d.h., das Absenden über den jQuery-Code ist fehlerhaft?

          Gruß
          Enrico

          1. Sorry, meine Antwort war zu unpräzise.

            Ich habe unmittelbar nach dem öffnenden PHP-Tag gleich den print_r-Befehl eingebaut und erhalte hier schon ein leeres Array:

              
            <?php  
            print_r($_POST);  
              
               $Parameter = array ('AuswahlHauptmenue', 'AuswahlUntermenue', 'Aktion', ...);  
              
               $AnzahlElemente = count ($Parameter);  
              
               for ($i = 0; $i < $AnzahlElemente; $i++)  
               {  
                  if (array_key_exists ($Parameter[$i], $_POST) || !empty ($_POST[$Parameter[$i]]))  
                  {  
                     echo $Parameter[$i] . ' = ' . $_POST[$Parameter[$i]] . ';';  
                  }  
                  else  
                  {  
                     if ($i == 0 || $i == 1)  
                     {  
                        echo $Parameter[$i] . ' = 0;';  
                     }  
                  }  
               }  
              
            ?>
            
            1. مرحبا

              Ich habe unmittelbar nach dem öffnenden PHP-Tag gleich den print_r-Befehl eingebaut und erhalte hier schon ein leeres Array:

              Schalte zur abwechslung mal das error_reproting ein, dann siehst du sofort, wo die vielen fehler liegen.

              mfg

              --
              <>
      2. Hi,

        [1] Hier bekomme ich immer den richtig zusammengesetzten Querystring, je nach dem, was ich im Hauptmenü angeklickt habe, beispielsweise "AuswahlHauptmenue=3&AuswahlUntermenue=0".

        Schön, ein String.

        Und wo _sendest_ du diesen an den Server …?

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
        1. Hallo ChrisB,

          Und wo _sendest_ du diesen an den Server …?

            
          $('div.ButtonHauptmenue, div.ButtonUntermenue').click(function()  
          {  
             Daten = $('#Sidebar').serialize();  
            
             $('#Sidebar').submit(function()  
             {  
                return false;  
             });  
            
             $.post("Index.php", function(Daten)  
             {  
                alert("Daten geladen: " + Daten);  
             });  
          });  
          
          

          Anklicken eines Links entweder der Klasse ButtonHauptmenue oder ButtonUntermenue
          |
          +-> Serialisieren der Formularfelder des Formulars "Sidebar"
              |
              +-> Eventhandler binden und Standard unterbinden
                  |
                  +-> Daten an das Script "Index.php" senden

          Sehe ich den Wald vor lauter Bäumen schon nicht mehr?

          Gruß
          Enrico
          PS: Es ändert sich aber auch nichts am Ergebnis, dass die Daten scheinbar nicht gesendet werden, auch wenn ich das Binding weglasse

          1. Hi,

            Und wo _sendest_ du diesen an den Server …?

            oder besser gefragt: _Was_ genau sendest du eigentlich?

            Daten = $('#Sidebar').serialize();

            [...]
               $.post("Index.php", function(Daten)
               {
                  alert("Daten geladen: " + Daten);
               });
            });

              
            Weißt du, was du da tust? Ich bin mir nicht so sicher ...  
              
            
            > Anklicken eines Links entweder der Klasse ButtonHauptmenue oder ButtonUntermenue  
            > |  
            > +-> ...  
            >     |  
            >     +-> ...  
            >         |  
            >         +-> Daten an das Script "Index.php" senden  
              
            Nö. Du versuchst, ein Funktionsobjekt zu senden, aber nicht den vorher zusammengesetzten String. Die tatsächlichen POST-Daten enthalten vermutlich den Text "function", weiter nichts. Kontrolliere das mal z.B. mit Firebug.  
              
            
            > Sehe ich den Wald vor lauter Bäumen schon nicht mehr?  
              
            Ich glaube eher, du versuchst gerade, dir selbst von hinten durch die Brust ins Knie zu schießen.  
              
            Ciao,  
             Martin  
            
            -- 
            F: Wer waren die ersten modernen Politiker?  
            A: Die Heiligen drei Könige. Sie legten die Arbeit nieder, zogen teure Klamotten an und gingen auf Reisen.  
            Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
            
            1. Hallo Martin,

              ah, ok, durch Verwenden einer anderen Methode bin ich jetzt schon mal einen Schritt weiter gekommen:

                
              $('div.ButtonHauptmenue, div.ButtonUntermenue').click(function()  
              {  
                 $.ajax({  
                    type:    'POST',  
                    url:     'Index.php',  
                    data:    $('#Sidebar').serialize(),  
                    success: function(response)  
                    {  
                       alert (response);  
                    }  
                 });  
              });  
              
              

              Jetzt erhalte ich folgende, auf den relevanten Bereich reduzierte Ausgabe beim alert-Befehl:

              <body>
                    <script type="text/javascript">
                       Array
                       (
                          [AuswahlHauptmenue] => 2
                          [AuswahlUntermenue] => 0
                       )
                       AuswahlHauptmenue = 2;AuswahlUntermenue = 0;

              Der Quelltext hingegen liefert wieder:

              <body>
                    <script type="text/javascript">
                       Array
                       (
                       )
                       AuswahlHauptmenue = 0;AuswahlUntermenue = 0;

              Dies bedeutet jetzt wohl final, dass der Fehler in nachfolgendem PHP-Code zu suchen ist:

                
              <?php  
                
                 $Parameter = array ('AuswahlHauptmenue', 'AuswahlUntermenue', 'Aktion', ...);  
                
                 $AnzahlElemente = count ($Parameter);  
                
                 for ($i = 0; $i < $AnzahlElemente; $i++)  
                 {  
                    if (array_key_exists ($Parameter[$i], $_POST) || !empty ($_POST[$Parameter[$i]]))  
                    {  
                       echo $Parameter[$i] . ' = ' . $_POST[$Parameter[$i]] . ';';  
                    }  
                    else  
                    {  
                       if ($i == 0 || $i == 1)  
                       {  
                          echo $Parameter[$i] . ' = 0;';  
                       }  
                    }  
                 }  
                
              ?>  
              
              

              Jetzt frage ich mich nur, warum die Variable response dann den Code richtig anzeigt, während er im Quelltext nicht angepasst (?) wird... ^^

              Gruß
              Enrico

              1. Ich komme einfach nicht weiter.

                Nirgends Notizen, Warnungen oder Fehlermeldungen, aber die Menüs werden einfach nicht neu aufgebaut, weil die Schlüsselvariablen im Browser nicht aktualisiert werden, was ja auch nicht geht, da Ajax ja keinen Reload macht...

                Ich bin mit meinem Latein am Ende und hau mich jetzt erst mal frustriert aufs Ohr, "morgen ist auch noch ein Tag" ^^

                Gruß
                Enrico

              2. Hi,

                Jetzt frage ich mich nur, warum die Variable response dann den Code richtig anzeigt, während er im Quelltext nicht angepasst (?) wird... ^^

                Was meinst du mit Quelltext – den JavaScript-Code, der bereits von Anfang an im Dokument stand?
                Natürlich wird der nicht angepasst, denn du lädst lediglich etwas nach. Auf den ursprünglich mal geladenen Quellcode hat das keine Auswirkung.

                MfG ChrisB

                --
                RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
                1. Hallo ChrisB,

                  ich blicke hier nicht mehr durch :-(

                  Nochmal von Anfang an:

                  Ich lasse den Inhalt von $_POST prüfen und ggfs. einlesen, wenn Übereinstimmungen mit dem Array Parameter vorliegen, also Werte übertragen wurden, bzw. die Variablen AuswahlHauptmenue und AuswahlUntermenue "hart" vorbelegen.

                  Wenn nicht, dann wurde die Seite zum ersten Mal aufgerufen.

                  In diesem Fall werden, wie bereits geschrieben, AuswahlHauptmenue und AuswahlUntermenue jeweils mit 0 vorbelegt.

                  Danach geht es in den jQuery-Block, der sich, wenn das Dokument und das Fenster vollständig geladen wurden und damit auch alle HTML-Elemente vorhanden sind, über die Funktion Navigation (AuswahlHauptmenue, AuswahlUntermenue); um die Erzeugung des Haupt- und, falls vorhanden, Untermenü kümmert.

                  Klicke ich nun einen Hauptmenüpunkt an, dann wird über jQuery das Formular "Sidebar" mit Übergabe der Nummer des ausgewählten Hauptmenüpunktes oder Untermenüpunktes ("entweder/oder") an die Datei "Index.php" geschickt und dann sollen die Menüs, entsprechend der Auswahl, entsprechend neu aufgebaut werden.

                  Und genau bei letztem Punkt hakt es irgendwo/irgendwie und ich komme partout nicht dahinter, wo und warum.

                  Entweder liegt es am Auslesen des PHP-Codes, wobei der, wenn ich Dich und jQuery richtig verstanden habe, nach dem ersten Aufruf unserer Seite dann gar kein zweites Mal zum Tragen kommt oder es liegt an der Integration der PHP-Variablen innerhalb des <script></script>-Blockes nach dem <body>-Tag.

                  Oder habe ich vielleicht einen komplett verqueren Denkfehler bzgl. der Funktionsweise von jQuery?

                  Gruß
                  Enrico

                  1. Bin in der Arbeit und kann es somit nicht testen, aber würde es etwas bringen, die Asynchronität mit "false" dazuzunehmen und damit zu ändern?

                      
                    $('div.ButtonHauptmenue, div.ButtonUntermenue').click(function()  
                    {  
                       $.ajax({  
                          type:    'POST',  
                          url:     'Index.php',  
                          async:   false,  
                          data:    $('#Sidebar').serialize(),  
                          success: function(response)  
                          {  
                             alert (response);  
                          }  
                       });  
                    });  
                    
                    

                    Gruß
                    Enrico

                    1. Hallo,

                      Bin in der Arbeit und kann es somit nicht testen, aber würde es etwas bringen, die Asynchronität mit "false" dazuzunehmen und damit zu ändern?

                      nö, nicht wenn du die Antwort sowieso in einer Callcack-Funktion verarbeitest.

                      $.ajax({
                            type:    'POST',
                            url:     'Index.php',

                      hat deine index.php wirklich ein großes 'I'? Das wäre sehr ungewöhnlich. Bedenke, dass die meisten Webserver unter Unix/Linux laufen, und da wird peinlich genau zwischen Groß- und Kleinschreibung unterschieden. Wenn du also zum Testen eine Windows-Maschine verwendest, und da läuft's, später auf dem Server des Webhosters aber nicht ...
                      Es ist daher eine verbreitete Konvention, Datei- und Verzeichnisnamen klein zu schreiben, was sich natürlich auch auf URLs bezieht. Mit dem aktuellen Problem hat das freilich nichts zu tun; die Ressource wird ja korrekt gefunden.

                      async:   false,
                            data:    $('#Sidebar').serialize(),
                            success: function(response)
                            {
                               alert (response);
                            }

                      Was tust du eigentlich mit der empfangenen Antwort? Wie verarbeitest du sie weiter? Diesen wichtigen Part hast du bisher überhaupt nicht erwähnt (oder ich hab's überlesen).

                      Ciao,
                       Martin

                      --
                      Der Gast geht solange zum Tresen, bis er bricht.
                      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                      1. Hallo Martin,

                        Du glaubst gar nicht, wie sehr es mich freut, dass sich doch noch jemand meines Problems annimmt, aber ich komme wirklich nicht weiter, erwarte aber auch nicht, das hätte man vielleicht meinen können, dass ich einen funktionablen Copy & Paste-Code vorgesetzt bekomme.

                        hat deine index.php wirklich ein großes 'I'?

                        Ja, die heißt auch wirklich so

                        Was tust du eigentlich mit der empfangenen Antwort? Wie verarbeitest du sie weiter?

                        Aha, vielleicht liegt auch hier mein Verständnisproblem, denn außer dem alert gibt es derzeit noch gar nichts.
                        Ich glaube, ich komme jetzt langsam dahinter:

                        jQuery lädt eine PHP, führt den Code aus und liefert etwas zurück, führt aber keinen Reload der Seite während der Aktion aus, richtig?

                        Dies hieße in meinem Fall, dass es nie zu einer Aktualisierung der Menüs kommen kann, wenn ich im success-Block keine Anweisungen habe, die mit der Rückmeldung etwas tun sollen, richtig?

                        Wiederum würde das bedeuten, dass ich meine Funktion Navigation (AuswahlHauptmenue, AuswahlUntermenue); im success-Block haben müsste, um eine Aktualisierung der Menüs zu erwirken.

                        Aber habe ich dann nicht eine Art von endloser Rekursion?

                        Gruß
                        Enrico

                        1. Hallo Enrico,

                          Du glaubst gar nicht, wie sehr es mich freut, dass sich doch noch jemand meines Problems annimmt

                          ;-)

                          Was tust du eigentlich mit der empfangenen Antwort? Wie verarbeitest du sie weiter?
                          Aha, vielleicht liegt auch hier mein Verständnisproblem, denn außer dem alert gibt es derzeit noch gar nichts.

                          Prima. Dann kann auch nichts passieren.

                          jQuery lädt eine PHP, führt den Code aus und liefert etwas zurück ...

                          Richtig. jQuery (bzw. der AJAX-Mechanismus von Javascript) ruft eine HTTP-Ressource auf, dabei wird auf dem Server PHP-Code ausgeführt, der etwas ausgibt. Diese Ausgabe bekommst du dann im response-String.

                          ... führt aber keinen Reload der Seite während der Aktion aus, richtig?

                          Richtig, das ist ja auch genau der Sinn der Sache. Sonst könnte man ja gleich die neue URL einfach an location.href zuweisen und wäre fertig.

                          Dies hieße in meinem Fall, dass es nie zu einer Aktualisierung der Menüs kommen kann, wenn ich im success-Block keine Anweisungen habe, die mit der Rückmeldung etwas tun sollen, richtig?

                          Genau. Von nichts kommt nichts.

                          Wiederum würde das bedeuten, dass ich meine Funktion Navigation (AuswahlHauptmenue, AuswahlUntermenue); im success-Block haben müsste, um eine Aktualisierung der Menüs zu erwirken.

                          Wie auch immer diese Funktion dann aussieht. Auf jeden Fall muss sie die vom Server empfangene Antwort auswerten und danach bestimmte Menüelemente sichtbar bzw. nicht sichtbar machen.

                          Aber habe ich dann nicht eine Art von endloser Rekursion?

                          Nein, wieso? - Natürlich darf dein PHP-Script auf die beiden unterschiedlichen Anfragen (komplettes HTML-Dokument laden vs. Menüaktualisierung per AJAX) nicht identisch reagieren. Vor allem ergibt es wenig Sinn, auf die Anfrage im zweiten Fall mit ausführlichem HTML zu antworten.

                          So gesehen frage ich mich mittlerweile, warum du überhaupt diesen ganzen Aufwand treibst. Es wäre doch viel einfacher, als Reaktion auf den Menü-Klick einfach nur die Anzeigeeigenschaften der betroffenen Listenelemente zwischen sichtbar und unsichtbar umzuschalten - ohne Umweg über ein serverseitiges Script. Damit wären wir beim Einwirken von Javascript auf CSS, etwa durch Setzen oder Wegnehmen einer Klasse für bestimmte Elemente.

                          So long,
                           Martin

                          --
                          Nicht jeder, der aus dem Rahmen fällt, war vorher im Bilde.
                          Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                          1. Hallo Martin,

                            ok, ok, ich sehe, ich habe es jetzt wohl endlich gerafft... :-)
                            Ich hoffe, ich bekomme es heute Abend auch funktionierender weise umgesetzt

                            So gesehen frage ich mich mittlerweile, warum du überhaupt diesen ganzen Aufwand treibst

                            Mir geht es in erster Linie darum, Reloads von Anfang an zu unterbinden und um jQuery zu lernen, da man hiermit doch sehr vielfältige Möglichkeiten hat, sich das Webleben einfacher zu gestalten, WENN man erst mal fit darin ist ;-)

                            Gruß
                            Enrico

                            1. Hallo Martin,

                              leider zu früh gefreut.

                              $('div.ButtonHauptmenue, div.ButtonUntermenue').click(function()
                              {
                                 alert (AuswahlHauptmenue);

                              $.ajax(
                                 {
                                    type:    'POST',
                                    url:     'Index.php',
                                    data:    $('#Sidebar').serialize(),
                                    success: function(response)
                                    {
                                       alert (AuswahlHauptmenue);
                                       alert (response);
                                       Navigation (AuswahlHauptmenue, AuswahlUntermenue);
                                    }
                                 });
                              });

                              Der erste alert-Befehl liefert mir immer 0, ebenso der alert-Befehl im success-Block.

                              response hingegen liefert mir u.a. AuswahlHauptmenue = 5, also zumindest hier eine korrekte Aktualisierung.

                              Warum wird dann aber dieser Wert nicht in der Funktion berücksichtigt?

                              Gruß
                              Enrico

                              1. Hi,

                                success: function(response)
                                      {
                                         alert (AuswahlHauptmenue);
                                         alert (response);
                                         Navigation (AuswahlHauptmenue, AuswahlUntermenue);
                                      }
                                   });
                                });

                                Der erste alert-Befehl liefert mir immer 0, ebenso der alert-Befehl im success-Block.

                                response hingegen liefert mir u.a. AuswahlHauptmenue = 5, also zumindest hier eine korrekte Aktualisierung.

                                Warum wird dann aber dieser Wert nicht in der Funktion berücksichtigt?

                                Wo soll er denn berücksichtigt werden, wenn außerhalb der success-Funktion nichts damit gemacht iwrd?

                                MfG ChrisB

                                --
                                RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
                                1. Hallo ChrisB,

                                  sorry, wenn ich jetzt möglicherweise dumm nachfrage, aber muss ich aus dem response im success-Block dann vor dem Funktionsaufruf AuswahlHauptmenue und AuswahlUntermenue wieder extrahieren?

                                  Gruß
                                  Enrico

                              2. Tach!

                                $('div.ButtonHauptmenue, div.ButtonUntermenue').click(function()
                                {
                                   alert (AuswahlHauptmenue);

                                $.ajax(
                                   {
                                      type:    'POST',
                                      url:     'Index.php',
                                      data:    $('#Sidebar').serialize(),
                                      success: function(response)
                                      {
                                         alert (AuswahlHauptmenue);
                                         alert (response);
                                         Navigation (AuswahlHauptmenue, AuswahlUntermenue);
                                      }
                                   });
                                });

                                Der erste alert-Befehl liefert mir immer 0, ebenso der alert-Befehl im success-Block.

                                Dass die beiden alert()s nur eine 0 liefern, wird daran liegen, dass diese in der Variable drinsteht.

                                response hingegen liefert mir u.a. AuswahlHauptmenue = 5, also zumindest hier eine korrekte Aktualisierung.

                                Aktualisierung wovon? In response steht nur das, was der Ajax-Request liefert, gegebenenfalls umgewandelt, je nach dataType. Diese Eigenschaft hast du nicht gesetzt, also passiert laut Dokumentation ein "Intelligent Guess" abhängig vom Content-Type der Response. Es sieht bei dir so aus, also ob da nur ein einfacher String kommt.

                                Warum wird dann aber dieser Wert nicht in der Funktion berücksichtigt?

                                Berücksichtigt von wem? Einfache Strings werden nicht automatisch von einem magischen Wesen berücksichtigt.

                                Vielleicht möchtest du auf PHP-Seite eine JSON-Antwort erzeugen, so dass du hier ein JSON-Objekt entgegennehmen kannst, dessen Werte du dann verwenden kannst.

                                dedlfix.

  2. Moin!


    Datei "Parameter.php"

    Egal was du da sonst so tust, hier fehlt es an kontextgerechtem Escaping!

    [5]      echo $Parameter[$i] . ' = ' . $_POST[$Parameter[$i]] . ';';

    Da ich annehme, dass dieses Skript dir die Werte von PHP nach Javascript transportieren soll, hast du dir hier eine sehr schöne Javascript-Injection-Lücke gebaut, die man wunderbar ausnutzen kann.

    json_encode() ist eine Funktion, die dir das Escaping im Javascript-Kontext abnimmt und freundlicherweise sogar korrekt Stringbegrenzer mit ausgibt, wenn du einen String vorliegen hast - das musst du nicht mal selbst machen.

    Bleibt am Ende nur noch, ggf. noch das Escaping im HTML-Kontext durchzuführen.

    - Sven Rautenberg

  3. Hallo,

    ich habe mich jetzt dazu geschlossen, ganz von JavaScript und damit auch von jQuery weg zu gehen und alles per PHP zu programmieren.

    Ich denke, das ist der bessere Weg.

    Danke an alle, die mir weiterhelfen wollten :-)

    Gruß
    Enrico