2010-02-03 3 views
12

theObject = {Comment retourner un tableau de la fonction de succès jQuery Ajax correctement?

getArray: function(){ 
     var groups = new Array; 
     $.ajax({ 
       type: "POST", 
       url: "link.php", 
       success: function (data){ 
        var counter = 0; 
        $('g',data).each(function(){  
         var group_name = $(this).find("name").text(); 
         var group_id = $(this).find("id").text(); 
         var group = { 
         id: group_id, 
         name: group_name 
         } 
         groups[counter] = group; 
         counter++; 
        }); 
        return groups; 
       } 
     }); 
    } 

} 

Et quand je tente d'appeler cette méthode:

var a = TheObject.getArray(); 
alert(a); 

Il retourne 'undefined'. Je ne sais pas où est le problème. Le tableau est créé à l'intérieur de la fonction de succès, mais je suis incapable de le renvoyer correctement. Merci pour votre aide!

Répondre

16

Dans votre code, vous recherchez groups en utilisant le codage procédural après l'appel ajax. Le problème principal est que vous recherchez groups avant que l'appel ajax soit terminé.

Un autre problème est que vous renvoyez des groupes à la fonction success(), mais la fonction TheObject.getArray() ne renvoie rien.

Vous avez donc besoin d'apporter le rappel dans la fonction ajax comme ceci:

TheObject = { 
    getArray: function(callback) { 
     var groups = new Array; 
     $.ajax({ 
       type: "POST", 
       url: "link.php", 
       success: function (data){ 
        var counter = 0; 
        $('g',data).each(function(){  
         var group_name = $(this).find("name").text(); 
         var group_id = $(this).find("id").text(); 
         var group = { 
         id: group_id, 
         name: group_name 
         } 
         groups[counter] = group; 
         counter++; 
        }); 
        callback.call(this,groups); 
       } 
     }); 
    } 
} 

TheObject.getArray(function(a) { 
    // this code runs when the ajax call is complete 
    alert(a); 
}); 
+0

Merci beaucoup l'homme! – ecu

0

Utilisez push sur la baie. Vous voulez également créer un type appelé Groupe, puis créer un nouveau groupe dans la boucle, puis le pousser dans le tableau.

+0

Veuillez lire la question. Je n'ai pas de problème avec la création du tableau. Le problème est que je ne sais pas comment l'obtenir en dehors de la fonction de succès. – ecu

5

Une version très simple de l'exemple de David.

TheObject = { 
    getArray: function(callback) { 
     $.ajax({ 
       cache: true, 
       type: "GET", 
       url: "http://www.domain.com/core/domains.php", 
       success: function (data){ 
        callback.call(this,data); 
       } 
     }); 
    } 
} 

TheObject.getArray(function(data) { 
    javascript: console.log(data);  
}); 
Questions connexes