Ankündigung

Einklappen
Keine Ankündigung bisher.

jquery in AJAx aufruf + return

Einklappen

Neue Werbung 2019

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

  • jquery in AJAx aufruf + return

    Hallo,

    ich habe eine JS funktion:

    Code:
    function Text(text)
    		{		
    		
    			urln = 'xyz'+text;				
    			$.ajax({
    				url: urln,
    				success: function(msg){			
    					return msg;
    					
    				}
    			});
    			
    		}
    Das mit dem return funktioniert nicht. Also ich möchte diese funktion Text(text); aufrufen können und dann soll das ergebniss des ajax aufrufes zurückgegeben werden.

    Was habe ich falsch gemacht?

  • #2
    naja das return an der Stelle bewirkt eigentlich gar nichts. Ich kann dir nicht mal sagen wohin dein mit Ajax geladener kontent verschwindet...
    Veruschs mal mit alert(msg) statt return msg.
    Normalerweise schreibst du in einen container das was da zurückkommt.
    Und ja ich weiß, es ist nur ein Beispiel, aber bist du dir bewusst, das dein uln eine gültige Seite sein muss?
    "My software never has bugs, it just develops random features."
    "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

    Kommentar


    • #3
      ja bei alert kommt der richtige inhalt nur irgendwie wird das nicht von der Funktion Text zurückgegeben?!

      Kommentar


      • #4
        da wird ja auch nichts mehr passieren. Das JS ist fertig geladen. Du soltest einfach den Content irgendwo reinschreiben...
        Sowas in der Art:
        Code:
        function Text(text) {        
            urln = 'xyz'+text;                
            $.ajax({
                url: urln,
                success: function(msg){            
                    $('#myIdIWantToLoadMyContentIn').html(msg);
                }
            });            
        }
        "My software never has bugs, it just develops random features."
        "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

        Kommentar


        • #5
          Du hast nicht verstanden, wie das Arbeiten mit Callback-Funktionen funktioniert.

          Die Callback-Funktion wird extra deshalb verwendet, damit Text nicht auf das Ergebnis des asynchronen Requests warten muss.
          Text macht den Request, und sagt, wenn der irgendwann mal fertig ist, soll bitte die Callback-Funktion aufgerufen werden. So, das war's von mir, ich bin jetzt fertig, Tschüss.

          Damit ist die Funktion Text beendet - und du kannst nicht erst später aus ihr heraus eine Rückgabe machen, das hättest du wenn gleich tun müssen.

          Du könntest jetzt auf die Idee kommen, statt einem asynchronen einen synchronen Request zu machen - dann bräuchtest du keine Callback-Funktion mehr, sondern Text selber könnte das Ergebnis des Requests verarbeiten. Das wäre aber extrem unklug - weil du damit den Browser inkl. UI komplett blockierst, bis das Ergebnis des Requests eingetroffen ist.


          Arbeite bitte mal ein AJAX-Tutorial durch, das diese Basics erklärt.
          [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

          Kommentar


          • #6
            du hast aber die möglichkeit dein ergebnis zwischenzuspeichern und zum späteren zeitpunkt ausgeben lassen etwa so:

            PHP-Code:
            myFunctions = function(){
            var 
            myText "";
            returnText = function(){
            return 
            myText;
            }
            loadText = function(text){
              
            urln 'xyz'+text;                
                $.
            ajax({
                   
            type"GET",
                        
            urlurln,
                    
            success: function(msg){            
                        
            myText msg;
                    }
                });  
            }
            }
            var 
            = new myFunctions();

            f.loadText('text');//ajax reuqest ausführen
            // irgendwas tolles machen
            alert(f.returnText()); //ausgabe des ajax requests 
            MFG
            apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

            Kommentar


            • #7
              Wenn Du den Code sequentiell abarbeiten lässt, wirst Du aber wahrscheinlich ein leeres Alert bekommen, da der Request vermutlich länger dauert als die Abarbeitung bis zum alert..

              Kommentar


              • #8
                Zitat von xm22 Beitrag anzeigen
                Wenn Du den Code sequentiell abarbeiten lässt, wirst Du aber wahrscheinlich ein leeres Alert bekommen, da der Request vermutlich länger dauert als die Abarbeitung bis zum alert..
                Du meinst das jetzt auf den Beitrag von xm22 bezogen oder?
                "My software never has bugs, it just develops random features."
                "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

                Kommentar


                • #9
                  Zitat von xm22 Beitrag anzeigen
                  Wenn Du den Code sequentiell abarbeiten lässt, wirst Du aber wahrscheinlich ein leeres Alert bekommen, da der Request vermutlich länger dauert als die Abarbeitung bis zum alert..
                  überzeugt.. dann ein wenig überarbeitet:

                  PHP-Code:
                  myFunctions = function(){
                  var 
                  myText "";
                  var 
                  isSuccess false;
                  returnText = function(){
                  if(
                  isSuccess)
                  alert(myText);
                  }
                  loadText = function(text){
                     
                  isSuccess false;
                    
                  urln 'xyz'+text;                
                      $.
                  ajax({
                         
                  type"GET",
                              
                  urlurln,
                          
                  success: function(msg){        
                              
                  isSuccess true;    
                              
                  myText msg;
                          }
                      });  
                  }
                  }
                  var 
                  = new myFunctions();

                  f.loadText('text');//ajax reuqest ausführen
                  // irgendwas tolles machen
                  f.alertText(); //ausgabe des ajax requests 
                  apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

                  Kommentar


                  • #10
                    Das dürfte kaum funktionieren.

                    Die wichtigste Frage hat noch niemand gestellt - wo wird der return verarbeitet. Wenn das eine Funktion ist, die nach dem Ajax-Success ausgeführt werden soll, dann gehört sie eben genbau dort hinein. Das geht auch mit einer Angabe einer Callback-Funktion.
                    [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


                    • #11
                      Code:
                      loadText = function(text){
                          urln = 'xyz'+text;                
                          $.ajax({
                             type: "GET",
                             url: urln,
                             success: function(msg){
                                var x = msg;
                              }
                          });
                          return x;
                      }
                      
                      alert(loadText('text'));
                      müsste doch auch funktionieren. oder?

                      Kommentar


                      • #12
                        Nein, eben nicht. success wird nicht zwingend vor dem return abgearbeitet. [WIKI]Callback[/WIKI]
                        [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


                        • #13
                          jup. sorry. haste rescht

                          Kommentar


                          • #14
                            Und x wär in dem Beispiel auch noch undefined..
                            I like cooking my family and my pets.
                            Use commas. Don't be a psycho.
                            [URL="http://jscouch.de"]Blog[/URL] - [URL="http://coverflowjs.github.io/coverflow/"]CoverflowJS[/URL]

                            Kommentar


                            • #15
                              Genau - x wäre nur im Scope der Callback-Funktion verfügbar.. Das einzige, das in dieser Richtung funktionieren würde, wäre:
                              PHP-Code:
                              loadText = function(callbackFunc){
                                  $.
                              ajax({
                                     
                              type"GET",
                                     
                              urlurln,
                                     
                              successcallbackFunc
                                  
                              });
                                  return 
                              x;
                              }

                              var 
                              callback = function(msg) {
                                  
                              alert(msg);
                              }

                              loadText(callback); 
                              Ich habe es jetzt allerdings nicht getestet. Bei Ajax muss man sich von der sequentiellen Arbeitsweise verabschieden.

                              EDIT: Noch was: Variablen und Funktion wie im obigen Fall _immer_ mit "var" deklarieren. Ansonsten sucht JS bei jedem Aufruf im nächst höheren Scope danach, obwohl die Variable vielleicht nur lokal vorhanden ist. Außerdem kann es ganz böse Nebenwirkungen geben. Bsp:
                              PHP-Code:
                              var testVariable 'Ganz wichtiger Wert!!!';
                              ...
                              function 
                              testFunktion() {
                                  
                              //Hier wird testVariable eigentlich als lokale
                                  //Variable benutzt, da der Autor vergessen hat,
                                  //dass sie im globalen Namespace schon vorhanden ist.
                                  //Leider hat er auch vergessen, hier die lokale
                                  //Variable mit "var" zu deklarieren
                                  
                              testVariable "Wert, der nur für die Funktion 'testFunktion' wichtig ist!";
                              }

                              testFunktion();

                              //Was meint ihr, was jetzt mit dem ganz wichtigen Wert passiert ist? 

                              Kommentar

                              Lädt...
                              X