2009-08-30 10 views
58
var list = []; 
$.getJSON("json.js", function(data) { 
    $.each(data, function(i, item) { 
     console.log(item.text); 
     list.push(item.text); 
    }); 
}); 
console.log(list.length); 

list.lengthlist.length retourne toujours 0. J'ai parcouru le JSON dans firebug et il est bien formé et tout a l'air bien. Je n'arrive tout simplement pas à ajouter un élément au tableau. Qu'est-ce qui me manque?Comment ajouter des éléments à un tableau dans jQuery?

+0

Cela semble juste. Est-ce que la boucle '$ .each' imprime les éléments dans le journal, mais ne les ajoute pas à' list'? – Kobi

Répondre

113

Comme $.getJSON est asynchrone, je pense que votre code console.log(list.length); est en train de se déclencher avant que votre tableau ne soit rempli. Pour corriger ce mettre votre déclaration console.log dans votre rappel:

var list = new Array(); 
$.getJSON("json.js", function(data) { 
    $.each(data, function(i, item) { 
     console.log(item.text); 
     list.push(item.text); 
    }); 
    console.log(list.length); 
}); 
3

Vous faites une demande de paiement ajax qui est donc asynchrone votre journal de la console de la longueur de la liste se produit avant que la demande de paiement ajax terminée. La seule façon de réaliser ce que vous voulez est de changer l'appel ajax pour être synchrone. Vous pouvez le faire en utilisant le .ajax et en passant asynch: false mais ce n'est pas recommandé car il verrouille l'interface utilisateur jusqu'à ce que l'appel est retourné, si elle ne parvient pas à retourner l'utilisateur doit se briser hors du navigateur.

2

Espérons que cela vous aidera ..

var list = []; 
    $(document).ready(function() { 
     $('#test').click(function() { 
      var oRows = $('#MainContent_Table1 tr').length; 
      $('#MainContent_Table1 tr').each(function (index) { 
       list.push(this.cells[0].innerHTML); 
      }); 
     }); 
    }); 
Questions connexes