2010-02-03 16 views
12

theObject = {¿Cómo devolver una matriz de jQuery ajax success function correctamente?

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; 
       } 
     }); 
    } 

} 

Y cuando trato de llamar a este método:

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

Devuelve 'indefinido'. No puedo entender dónde está el problema. El arreglo se crea dentro de la función de éxito pero no puedo devolverlo correctamente. ¡Gracias por su ayuda!

Respuesta

16

En su código, usted está buscando groups utilizando la codificación de procedimiento después de que se realizó la llamada ajax. El principal problema es que estás buscando groups antes de que se complete la llamada ajax.

Otro problema es que está devolviendo grupos a la función success(), pero la función TheObject.getArray() no devuelve nada.

Así que hay que traer a la devolución de llamada en la función ajax así:

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

Muchas gracias, hombre! – ecu

0

Use push en la matriz. También desea crear un tipo llamado Grupo y luego crear un nuevo grupo en el ciclo y luego insertarlo en el conjunto.

+0

Por favor, lea la pregunta. No tengo ningún problema con la creación de la matriz. El problema es que no sé cómo obtenerlo fuera de la función de éxito. – ecu

5

Una versión muy simple del ejemplo 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);  
}); 
Cuestiones relacionadas