2010-04-07 5 views
2

Dans un appel JQuery getJSON, comment puis-je connaître la longueur du JSON renvoyé?JQuery: Obtenir la longueur de la réponse JSON?

function refreshRoomList() { 
    $.getJSON('API/list_rooms', 
      function (rooms) { 
       if (rooms.length > 0) { 
        $("#existing-room-list").empty(); 
        $("#join-existing-room").text("Join existing room:"); // this shouldn't be here 
        $.each(rooms, function (index, roomName) { 
         var newChild = sprintf('<li><a href="room?key=%s">%s</a></li>', index, roomName); 
         $("#existing-room-list").append(newChild); 
        }); 
       } 
       else { 
        $("#join-existing-room").text("No rooms found."); 
       } 
      }); 
} 

cela ne fonctionne pas pour une raison quelconque, mais si je remplace rooms.length > 0 avec true, la liste complète des chambres est imprimé.

Si rooms est vide, il est renvoyé sous la forme {}. au lieu

+0

La charge JSON est-elle renvoyée entre crochets '[]' ou bouclés '{}'? –

+0

Quel est le problème avec 'users.length'? – Bird

+0

Je pense que je l'utilise mal. Voir au dessus. –

Répondre

3

Si des chambres est vide, il est retourné comme {}.

Ainsi, ce n'est pas un tableau, mais un objet. Les objets n'ont pas de longueur. Il n'y en a qu'un seul. Si vous voulez noter rien, alors plutôt utiliser null au lieu de {}. De cette façon, vous pouvez utiliser if (rooms) à la place.

Pour en savoir plus sur JSON, vous pouvez trouver this article utile.

0

Essayez cette approche, dans votre situation, il devrait être nulle quand il est vide:

if (rooms) { 
+0

Cela semble fonctionner dans mon test initial minimal. Merci. –

+1

@Rosarch: Je pense que vous aurez besoin de plus de tests;) –

Questions connexes