2009-01-17 9 views
28

Ich konnte nichts über das Erhalten der Gesamtzahl der JSON-Datensätze mit jQuery finden.Wie bekomme ich die Gesamtzahl der Json-Datensätze mit JQuery?

Hier ist die JSON zurückgegeben:

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

Hier ist mein 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

Warum die Abstimmung zu schließen? – Kev

+0

Aber die $ .each im Erfolgs-Handler zeigt die richtigen Datensätze? – tanathos

+0

Ja, alles funktioniert gut außer der Gesamtzahl der Datensätze. –

Antwort

65

Wenn Sie so etwas wie dieses:

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

dann können Sie tun :

alert(json.length) 
+2

Danke für deine Antwort, aber ich habe deinen Code ausprobiert, aber ich arbeite nicht für mich. –

+5

Dies zeigt die Länge der JSON-Zeichenfolge, nicht die Array-Anzahl – Sliq

+1

Danke @tiago! Sie gaben mir schließlich meine Lösung und waren folgende: 'Erfolg: Funktion (Antwort) { console.log (response.length); }, ' –

4

Ihr JSON ist kein Array, es hat keine Längeneigenschaft. Sie müssen Ihre Datenretoure oder die Art, wie Sie Ihre Daten zählen, ändern.

+0

Sogar ich habe das Json-Ergebnis geändert (ich bin mir sicher, dass es korrekt ist), die Länge funktioniert immer noch nicht. –

6

Warum möchten Sie in diesem Fall die Länge?

Wenn Sie Länge überprüfen wollen, haben den Server einen JSON-Array mit Schlüssel-Wert-Paaren wie folgt zurück:

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

In JSON, [und] stellt einen Array (mit einer Länge Eigenschaft) , {und} repräsentiert ein Objekt (ohne Längeneigenschaft). Sie können durch die Elemente eines Objekts iterieren, aber Sie erhalten auch Funktionen, die eine Längenüberprüfung der Anzahl der Elemente überflüssig machen, außer dass Sie darüber iterieren.

2

Was Sie suchen ist

j.d.length 

Die d ist der Schlüssel. Zumindest in meinem Fall benutze ich einen .NET Webservice.

$.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

Vergessen Sie nicht, es als Antwort zu markieren, wenn es für Sie funktioniert. – Frenchie

+0

Dies funktionierte nicht für mich, ich rief "hasOwnProperty", die die "Länge" zur Verfügung hat, aber es gab false zurück. Vielleicht war es jedoch spezifisch für die Struktur meines JSON. –

15

Das OP versucht, die Anzahl der Eigenschaften in einem JSON-Objekt zu zählen. Dies könnte mit einer inkrementierten Temp-Variable im Iterator geschehen, aber er möchte die Zahl wissen, bevor die Iteration beginnt. Eine einfache Funktion, die den Bedarf erfüllt, ist am Ende von this page zur Verfügung gestellt.

Hier ist ein Ausschneiden und Einfügen des Codes, die für mich gearbeitet:

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

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

Dies sollte auch für ein JSON-Objekt arbeiten. Für andere Objekte, die Eigenschaften von ihrer Prototypkette ableiten können, müssten Sie einen hasOwnProperty() Test hinzufügen.

2

Vielleicht möchten Sie vielleicht zunächst JSON.parse Ihre Rückkehr Ergebnis versuchen, dann können Sie die Zählung erhalten, indem .length

4

Versuchen Sie Folgendes:

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

Hat IE8 nicht und niedriger.

Verwandte Themen