jQuery Ajax return Wert

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

  • jQuery Ajax return Wert

    Hi,
    folgende Frage:
    ich will ein Array mit dem Ergebnis einer Ajax abfrage füllen und anschließend weiter bearbeiten. Nur wie übergebe ich das Array foo als Referenz an die anonyme funktion in der Ajax anfrage?
    PHP-Code:
    var foo = new array();
    jQ.get('ajax/test.xml'
        function(
    xml){
            
    jQ('node',xml).each(function(i) {
            
    // action 2 transfer xml data to array
            
    }            
        );}
    );
    alert(foo[0]); // gibt natürlcih nichts aus.... 
    "I don't want to belong to any club that would accept me as a member."

    Groucho Marx

  • #2
    Hallo,

    foo brauchst du nicht zu übergeben, du kannst es in der Funktion direkt benutzen, solange in deren Scope nicht ein anderes foo deklariert wird.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Hmm, dachte ich auch aber das gibt mir ein undefined:
      Wo habe ich denn Tomaten auf den Augen.....
      PHP-Code:
      var pix =  new Array();
          
      jQ.get('ajax/test.xml'
            function(
      xml){
              
      jQ('photo',xml).each(function(i) {
                  var 
      imgPlace jQ(this).find("place").text();
                  var 
      imgTitle jQ(this).find("desc").text();
                  var 
      imgAddi jQ(this).find("addi").text();
                  
      alert(i);// zählt hoch...
                  
      pix[i] = imgPlace;                
             });
                      
       });
      alert(pix[1]);//undefinded 
      Zuletzt geändert von mcmurphy; 25.08.2010, 18:51.
      "I don't want to belong to any club that would accept me as a member."

      Groucho Marx

      Kommentar


      • #4
        Steht denn in imgplace was drin oder ist das vielleicht selbst schon undefined?
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          in imgplace steht ein String.
          Poste mal meinen kompletten versuch:
          PHP-Code:
          jQ jQuery.noConflict();
          jQ(document).ready(function(){
          pix =  new Array();
          jQ.get('ajax/test.xml'
              function(
          xml){
                 
          jQ('photo',xml).each(function(i) {
                      var 
          imgPlace jQ(this).find("place").text();
                      var 
          imgTitle jQ(this).find("desc").text();
                      var 
          imgAddi jQ(this).find("addi").text();
                      var 
          output '<div style="float:left; ">';    
                      
          output += '<img class="loading" src="loading.gif" />';
                      
          output += '<img src="'imgPlace '" /><br />';
                      
          output += '<b>'imgTitle +'</b><br />';
                      
          output += '<i>'imgAddi +'</i><br />';    
                      
          output += '<u>Bild: '+ +++'</u><br />';                    
                      
          output += '</div>';
                      
          jQ("#data").append(output);
                     
          pix[i] = imgPlace;
                      
          alert(pix[i]);// gibt mir den richtigen Wert aus - 
                     //diese Alerts kommen aber erst NACH alert(pix[0]);
               
          }    
              );
                });
               
          alert(pix[0]);// ist hier undefined - wird aber auch zuerst ausgeben
          }); 
          Was ich nicht verstehe das beim Aufruf im Browser zuerst der alert(pix[0]); ausgegeben wird und erst dann die alerts aus der Ajax Function.
          Deswegen ja das undefined....
          Zuletzt geändert von mcmurphy; 25.08.2010, 18:53.
          "I don't want to belong to any club that would accept me as a member."

          Groucho Marx

          Kommentar


          • #6
            Achso, ich kenne mich mit jQuery nicht aus und wusste nicht, dass das was asynchrones ist. D. h. deine Funktion ist ein Callback, der irgendwann aufgerufen wird, wenn die angefragte Ressource geantwortet hat und das passiert im Hintergrund. Deswegen wird in der Zwischenzeit dein Code weiterverarbeitet und zu dem Zeitpunkt steht in deinem Array halt noch nichts drin.

            Abhilfe: dein Zugriff auf pix[0] muss innerhalb der function(xml) und nach dem each-Kram stehen.

            Sorry, dass ich das nicht eher gemerkt hab.
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              Sorry, dass ich das nicht eher gemerkt hab.
              ach was - XXL dank das du dich meinem Problem angenommen hast.
              Dann würde ein synchroner Aufruf mein Problem ja beheben - muß ich mir anschauen
              THX
              Zuletzt geändert von mcmurphy; 25.08.2010, 19:23.
              "I don't want to belong to any club that would accept me as a member."

              Groucho Marx

              Kommentar


              • #8
                Zitat von mcmurphy Beitrag anzeigen
                Dann würde ein synchroner Aufruf mein Problem ja beheben
                Naja, prinzipiell stimmt das, aber ob das Sinn macht, ist eine andere Frage. Synchrone Requests legen für die Round-Trip-Dauer die Seite lahm, d. h. es werden dann auch keine Events bearbeitet, die Seite (falls sie noch im Aufbau ist) wird nicht weiter geladen etc.

                Asynchron kannst du trotzdem arbeiten, nur musst du alle Aktionen die von dem Request abhängen, mit in den Callback übernehmen, was ja jetzt auch nicht so tragisch wäre.
                [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                Super, danke!
                [/COLOR]

                Kommentar


                • #9
                  Na Ziel der ganzen Sache ist ist eine Div Box mit einem Pager andere Inhalte bekommen soll und das Hintergrund bild von body sich ändern soll.
                  Deswegen dachte ich mir schieb das alles am Anfang in ein Array und hole dir dann die Inhalte aus dem Array. Wenn ich jedesmal eine anfrage stelle habe ich ja ladezeiten beim dem Bild und der Hintergrund würde wegbrechen.
                  Klapp jetzt erstmal die Kiste zu und mache morgen weiter ....
                  "I don't want to belong to any club that would accept me as a member."

                  Groucho Marx

                  Kommentar

                  Lädt...
                  X