Ankündigung

Einklappen
Keine Ankündigung bisher.

Wo ist der Fehler? JS Variable kann nicht ausgelesen werden

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Wo ist der Fehler? JS Variable kann nicht ausgelesen werden

    Hallo zusammen,

    ich bin noch neu in Sachen JS, ich komm einfach schon seit Stunden nicht mehr weiter.

    Im unten aufgeführten Code soll später dann die Variable content den Wert von data (Iquery) aufnehmen, damit ich den Wert, der auch in einen div gepackt wird, nochmal verwenden kann.

    Code:
    <script type="text/javascript">
    
    var content;
    setInterval(function()
    {
    
    
             $.post("includes/iframe-aktfzgstatus.php", { id: "<?php echo $row->id; ?>" },
             function(data)
                     {
                     content = 'test';
                     $('div#status').html(data);
                     }
             );
    
    
    }, 2000);
    alert(content);
    
    </script>
    Ich habe gelernt, dass man globale Variablen vor der Funktion definieren muss, sie anschließend in der Funktion zu ändern und sie somit auch für andere Funktionen zur Verfügung zu haben.

    Jedoch gibt mir das alert(content) ein "undefined" aus.

    In dem Beispiel ist die Variable ja wie man sieht sogar noch manuell mit dem Wert "test" versehen. Geht trotzdem nicht.

    Irgendwas mache ich da falsch, ich hab die Stellung der Variablendefinition schon hundert mal verändert.

    Danke, Gruß hehe94

  • #2
    Dein alert(content) wird nach dem "einrichten" der funktion die nach einem Interval von 2000 erst das erstemal ausgeführt wird, abgesetzt. Also bevor die methode überhaupt erst content befüllen kann.

    content musst du nicht deklarieren, prüf den typ von content ( quasi "nicht undefined" ), und nutze content einfach wie jetzt in der function. Alle Variablen die ohne var genutzt werden sind sofort global.

    Kommentar


    • #3
      Also ich hab jetzt die selbe Funktion nochmals, aber ohne Intervall oben drangesetzt, hatte ich vorher schonmal (damit man nicht erst 2 Sekunden warten muss, bis der div befüllt wird).

      Jetzt zeigt mein alert ein [object Window] an.

      Code:
      <script type="text/javascript">
      $.post("includes/iframe-aktfzgstatus.php", { id: "<?php echo $row->id; ?>" },
               function(data)
                       {
                       content = 'test';
                       $('div#status').html(data);
                       }
               );
      alert(content);
      </script>

      Kommentar


      • #4
        http://jsfiddle.net/cSBJX/

        Wann wie wo wird was wie ausgeführt bei dir ?

        Kommentar


        • #5
          So wie Du es geschrieben hast, gehts bei mir auch.

          Jedoch nicht wenn ich die Variable content in die Funktion data reinstecke...

          Das wird wohl aus dem Grund sein, den Du bereits genannt hast. Denn ohne dem Interval gehts jetzt, auch wenn die Variable in der Funktion erst bestimmt wird.

          Hab ich da eine Möglichkeit, das zu ändern?

          Grundsätzlich will ich ja gar kein alert haben, sondern der Wert, der ständig aktuell sein soll, soll in eine ständig aktuelle Variable gespeichert werden. Mit der will ich dann den Inhalt überprüfen.

          Ich denke, man kann doch eine Funktion einbauen, die die Funktion, die in dem Fall das alert beinhaltet, erst nach 2001 MS ausführt, oder?

          Kommentar


          • #6
            Zitat von hehe94 Beitrag anzeigen
            auch wenn die Variable in der Funktion erst bestimmt wird.
            Variablen in JS sind immer global, außer du deklarierst sie mit "var".

            Zitat von hehe94 Beitrag anzeigen
            Ich denke, man kann doch eine Funktion einbauen, die die Funktion, die in dem Fall das alert beinhaltet, erst nach 2001 MS ausführt, oder?
            Mach dir doch einfach wo nen Button o.Ä. hin und bau dort dein alert rein. Oder überwach die Variable gleich mit Firebug & Co.

            Grüße.

            Kommentar


            • #7
              Ich denke, man kann doch eine Funktion einbauen, die die Funktion, die in dem Fall das alert beinhaltet, erst nach 2001 MS ausführt, oder?
              Das ist Unsinn. nach 2000ms wird erst der POST-Request ausgelöst. Du hast keine Kontrolle darüber, wie lange der dauert. Zudem hast Du einen verlässlichen Erfolgskontext (function(data)), wozu also solche Handstände? Ich befürchte, Du solltest Dir die Sprache noch mal etwas mehr als 5 Minuten angucken. Ich wittere hier erhebliche Verständlislücken.

              Kommentar


              • #8
                Mach dir doch einfach wo nen Button o.Ä. hin und bau dort dein alert rein.
                Er debuggt doch nicht im Netscape Navigator...

                Am besten das hier durcharbeiten, istn guter Einstieg: http://fixingthesejquery.com/#slide1

                Danach sollte dich der Link weiterbringen: $.when

                Kommentar

                Lädt...
                X