2010-02-03 16 views
12

theObject = {Come restituire correttamente un array dalla funzione jQuery ajax success?

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

} 

E quando provo a chiamare questo metodo:

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

restituisce 'indefinito'. Non riesco a capire dove sia il problema. L'array viene creato all'interno della funzione di successo ma non sono in grado di restituirlo correttamente. Grazie per il tuo aiuto!

risposta

16

Nel codice, si sta cercando groups utilizzando la codifica procedurale dopo la chiamata ajax. Il problema principale è che stai cercando groups prima che la chiamata ajax sia completa.

Un altro problema è che si stanno restituendo gruppi alla funzione success(), ma la funzione TheObject.getArray() non restituisce nulla.

quindi è necessario portare nella richiamata nella funzione ajax in questo modo:

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

Grazie mille amico! – ecu

0

Utilizzare l'array push. Inoltre, si desidera creare un tipo chiamato Gruppo, quindi creare un nuovo gruppo nel ciclo e quindi inserirlo nell'array.

+0

Si prega di leggere la domanda. Non ho problemi con la creazione dell'array. Il problema è che non so come ottenerlo al di fuori della funzione di successo. – ecu

5

Una versione molto semplice per l'esempio di 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);  
}); 
Problemi correlati