2009-01-17 4 views
28

Je n'ai rien trouvé concernant l'obtention du nombre total d'enregistrements JSON en utilisant jQuery.Comment obtenir le nombre total d'enregistrements Json à l'aide de JQuery?

Voici le JSON retourné:

{"Email":"Please enter your Email.","Password":"Please enter a password."}

Voici mon code:

$(function() { 
    $("#btnSubmit").click(function() { 
     $.ajax({ 
      url: "/account/signup", 
      type: "POST", 
      dataType: "json", 
      data: { 
       Email: $("#strEmail").val(), 
       Password: $("#strPassword").val() 
      }, 
      success: function(j) { 
        $(".errMsg").hide(); 
        alert(j.length); // I couldn't get the total count 
       $.each(j, function(n) { 
        $("#err" + n).html(j[n]); 
        $("#err" + n).show(); 
       }) 

      }, 
      error: function(req, status, error) { 
       alert(req); 
      } 
     }); 
    }); 
}); 
+0

Pourquoi le vote se termine? – Kev

+0

Mais le gestionnaire $ .each dans le succès montre les enregistrements corrects? – tanathos

+0

Oui, tout fonctionne bien sauf le nombre total d'enregistrements. –

Répondre

65

Si vous avez quelque chose comme ceci:

var json = [ {a:b, c:d}, {e:f, g:h, ...}, {..}, ... ] 

alors, vous pouvez faire :

alert(json.length) 
+2

Merci pour votre réponse, mais j'ai essayé votre code, mais je ne travaille pas pour moi. –

+5

Cela montre la longueur de la chaîne JSON, pas le nombre de tableaux – Sliq

+1

Merci @tiago! Vous m'a finalement donné ma solution et était la suivante: 'succès: fonction (réponse) { console.log (response.length); }, ' –

4

Votre JSON n'est pas un tableau, il n'a pas de propriété de longueur. Vous devez modifier votre retour de données ou la manière dont vous comptez vos données.

+0

Même si j'ai changé le résultat JSON (je suis sûr que c'est correct), la longueur ne fonctionne toujours pas. –

6

Pourquoi voudriez-vous la longueur dans ce cas?

Si vous voulez vérifier la longueur, que le serveur retourne un tableau JSON avec des paires clé-valeur comme celle-ci:

[ 
    {key:value}, 
    {key:value} 
] 

JSON, [et] représente un tableau (avec une propriété de longueur) , {et} représente un objet (sans une propriété de longueur). Vous pouvez itérer à travers les membres d'un objet, mais vous obtiendrez également des fonctions, ce qui rend inutile la vérification du nombre de membres, sauf pour les parcourir.

2

Qu'est-ce que vous cherchez est

j.d.length 

Le d est la clé. Au moins c'est dans mon cas, j'utilise un webservice .NET.

$.ajax({ 
      type: "POST", 
      url: "CantTellU.asmx", 
      data: "{'userID' : " + parseInt($.query.get('ID')) + " }", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function(msg, status) { 
       ApplyTemplate(msg); 
       alert(msg.d.length); 
      } 
     }); 
+0

N'oubliez pas de marquer comme réponse si cela fonctionne pour vous. – Frenchie

+0

Cela n'a pas fonctionné pour moi, j'ai appelé "hasOwnProperty" qui a la "longueur" disponible mais il a renvoyé faux. Peut-être que c'était spécifique à la structure de mon JSON. –

15

L'OP tente de compter le nombre de propriétés dans un objet JSON. Cela peut être fait avec une variable temp incrémentée dans l'itérateur, mais il semble vouloir connaître le nombre avant le début de l'itération. Une fonction simple qui répond au besoin est fournie au bas de this page.

est ici une coupe et coller du code, ce qui a fonctionné pour moi:

function countProperties(obj) { 
    var prop; 
    var propCount = 0; 

    for (prop in obj) { 
    propCount++; 
    } 
    return propCount; 
} 

Cela devrait bien fonctionner pour un objet JSON. Pour les autres objets, qui peuvent dériver des propriétés de leur chaîne prototype, vous devez ajouter un test hasOwnProperty().

2

Peut-être que vous pourriez vouloir essayer JSON.parse votre résultat de retour en premier, alors vous pouvez obtenir le nombre par .length

4

Effectuez les actions suivantes:

var count=Object.keys(result).length; 

ne fonctionne pas IE8 et inférieure.

Questions connexes