Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] JS liefert undefined

Einklappen

Neue Werbung 2019

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

  • [Erledigt] JS liefert undefined

    Hallo,
    muss mich in meiner Verzweiflung mal wieder hier an die Hilfe wagen ^^'

    Ich rufe eine funktion auf, in der ich ein Ajax-Request mache.
    PHP-Code:
    window.onload = function()
    {
        var 
    test2 controlldata();  
         
    console.log(test2);

    PHP-Code:
    function controlldata()
    {
        $.
    ajax
        
    ({
            
    url:  "controll_ajax.php",
            
    type"POST",
            
    asyncfalse,
        }).
    done(function(msg)
        {
            
    console.log(msg);
            return 
    32;
        });
     } 
    Das Problem, ich bekomme von der funktion "undefined" zurück, obwohl ich ja schon async: false drin habe. Und er laut ausgabe, auch zuerst meine Daten ausgibt.
    Ich versteh es nicht, warum bekomm ich keine Daten?

    Ich hoffe es kann jemand helfen.

  • #2
    So funktioniert javascript nicht. Kannst du das nicht einfach so machen?

    PHP-Code:
    function controlldata() {
        return 
    jQuery.ajax({
            
    url:  "controll_ajax.php",
            
    type"POST",
            
    asyncfalse,
        });
    }

    jQuery(function ($) {
        
    controlldata().done(function(msg) {
            
    console.log(msg);
        });  
    }); 
    Heute macht man sowas über promises. JQuery bietet dafür folgende Funktionen: http://api.jquery.com/category/deferred-object/

    Kommentar


    • #3
      Ohhkeey, bekomme schon mal mehr als vorher^^ Danke, schon mal.
      Versteh nur nicht, wieso funktioniert meine variante überhaupt nicht?

      Jetzt hab ich wohl ein problem mit JSON

      ich probier noch mal rum. Wie gesagt Danke.

      Kommentar


      • #4
        Für json kannst du noch den ajax-parameter: dataType: 'json' angeben. Dann kommt via msg ein json-object/array/scalar/typ.

        Kommentar


        • #5
          Hab ich auch =)
          Hatte es nur oben im Bsp weggelassen (war vllt nicht die beste Idee).

          Bekomme auch das JSON Objekt zurück, nur wenn ich es zurückgeben will, dann kommt da eben ein String raus. (Komischer Satz)
          PHP-Code:
          var test2 controlldata().done(function(msg

             
          console.log(msg);
             return 
          msg;
          }); 
          Ergebnis: "\r\n["4567","53","5467","22","88.45"]"
          anstatt ["4567"...]

          Ansonsten versusch ich gerade das promise zu verstehen.

          Kommentar


          • #6
            Wahrscheinlich, weil du \r\n noch irgendwo in deinem Code ausgibst. Kann es sein, dass du ?> verwendest? ... und hiernach vielleicht noch ein Return mit ausgibst? Die kannst (und solltest) du weglassen.

            Kommentar


            • #7
              In der Datei selbst nicht. Auch nicht in der ich die Daten hole.
              Hab auch noch geschaut, wo ich sonst noch Zeichen ausgeben. Aber nichts gefunden.

              PHP-Code:
              var test2 controlldata().done(function(msg
              {
                   
              console.log(msg);
                   return 
              32;
              });   
              console.log(test2); 
              Er gibt allerdings nicht die 32 zurück.
              sondern eben wie unten: "\r\n["4567","53","5467","22","88.45"]"


              ohh man, kann doch net so kompliziert sein

              Kommentar


              • #8
                PHP-Code:
                // Passiert sofort
                var test2 0;

                controlldata().done(function(msg) {
                     
                // Passiert zeitversetzt
                     
                test2 32;
                     
                console.log(test2); // 32
                });

                // Passiert sofort
                console.log(test2// 0 
                Ajax ist von Natur aus nicht synchron. Du solltest dich also mit dessen asynchroner Natur anfreunden und mit Callbacks arbeiten. Promises sind der Weg, der für Javascript hier vorgesehen ist.

                http://www.html5rocks.com/en/tutoria...from_locale=de

                http://www.heise.de/developer/artike...s-2084517.html

                Kommentar


                • #9
                  So hab ich jetzt probiert.
                  PHP-Code:
                  window.onload = function()
                  {
                       $.
                  when
                       
                  (
                            
                  controlldata()
                       ).
                  then(function(msg)
                      {
                         
                  alert("test");                     
                      }); 
                  die controlldata sieht jetzt so aus:
                  PHP-Code:
                  var dfd = new jQuery.Deferred();
                      
                  dfd.reject
                              $.
                  ajax
                              
                  ({
                                  
                  url:  "controll_ajax.php",
                                  
                  type"POST",
                                  
                  data"id=" + $("#kat_data").val(),
                                  
                  dataType "json"
                              
                  })
                              );
                      return 
                  dfd.promise(); 
                  Das alert wird leider nicht ausgelöst.
                  Laut Firebug, bekomm ich auch eine "Antwort". Nur wie gesagt, alert wird nicht aufgerufen, bzw. alles was ich dann in .then mache.
                  Was mach ich denn nun schon wieder falsch =/

                  EDIT: ach bin ich doof, ich muss resolve nehmen und nicht reject *facepalm*

                  Kommentar


                  • #10
                    Im Falle von Ajax gibt dir jQuery seit v1.5 bereits ein promise object zurück. Du brauchst da also nicht noch mal eines drum bauen.

                    Kommentar


                    • #11
                      Das Problem, ich bekomme von der funktion "undefined" zurück, obwohl ich ja schon async: false drin habe. Und er laut ausgabe, auch zuerst meine Daten ausgibt.
                      Ich versteh es nicht, warum bekomm ich keine Daten?
                      Schon mal überlegt, dass Du da zwei verschachtelte Funktionen ausführst und nur die innere ein return besitzt?
                      [COLOR="#F5F5FF"]--[/COLOR]
                      [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                      [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                      [COLOR="#F5F5FF"]
                      --[/COLOR]

                      Kommentar


                      • #12
                        Zitat von nikosch Beitrag anzeigen
                        Schon mal überlegt, dass Du da zwei verschachtelte Funktionen ausführst und nur die innere ein return besitzt?
                        Ehrlich gesagt,... nein^^
                        Aber jetzt wo du es sagst... Nur das hätte ja die Lösung auch nicht besser gemacht?

                        @rkr: ok, werds aber so lassen, da ich es zum ersten mal nutze.

                        Hab aber noch ein anderes Problem^^'
                        =( Wie gesagt, ich bekomme jetzt als antwort "["53","5467","22","88.45"]"
                        WEnn ich mir das Object was ich zurück bekomme, nun genauer ansehe. Steht im ResponseJSON das was ich möchte, also "["53","5467","22","88.45"]" im responseText "\r\n["53","5467","22","88.45"]".
                        Wie greif ich denn nun darauf zu? Oder was mach ich falsch

                        Ausgangspunkt wäre immernoch das von gestern:
                        PHP-Code:
                        $.when (
                                
                        controlldata()
                        ).
                        then(function(msg)
                        {
                          
                        console.log(msg); 
                        Eigentlich wollte ich jetzt mit dem Object die einzelnen Werte in ein anderes Object pushen. Wie gesagt kann nur nicht zugreifen

                        Kommentar


                        • #13
                          Vorher:
                          PHP-Code:
                          window.onload = function (); 
                          Nachher:
                          PHP-Code:
                          jQuery(function ($) {}); 
                          Verhindert Inkompatiblitäten mit alten oder fremden Bibliotheken. Auf diese Weise können beispielsweise Prototype und jQuery friedlich co-existieren. (Mehr dazu hier: http://api.jquery.com/ready/)

                          Vorher:
                          PHP-Code:
                          $.when(controlldata())
                              .
                          then(function(msg) {
                                  
                          alert("test");
                              }); 
                          Nachher:
                          PHP-Code:
                          controlldata().then(function () {
                              
                          alert("test");
                          }); 

                          Kommentar


                          • #14
                            Danke, habe ich geändert.

                            Leider habe ich immernoch das Problem mit dem auslesen

                            Kommentar


                            • #15
                              Was sagen denn die Dev-Tools vom Chrome oder Firefox, was du da genau vom Server zurück bekommst?

                              Kommentar

                              Lädt...
                              X