2012-09-18 4 views
0

data.d =Looping par JSON data.d

[ 
    { 
    "NodeId": "BK01", 
    "NodeName": "Books", 
    "ParentId": null, 
    "Likes": null 
    }, 
    { 
    "NodeId": "CO01", 
    "NodeName": "Computers", 
    "ParentId": null, 
    "Likes": null 
    }, 
    { 
    "NodeId": "GA01", 
    "NodeName": "Gaming", 
    "ParentId": null, 
    "Likes": null 
    }, 
    { 
    "NodeId": "MO01", 
    "NodeName": "Mobile & Accessories", 
    "ParentId": null, 
    "Likes": null 
    } 
] 

WebService

<WebMethod()> _ 
    Public Shared Function getCategories() As String 
     Dim details As New List(Of Nodes)() 
     Dim index As New Default2 
     Using ds As Data.DataSet = index.db.ExecuteDataSet(CommandType.Text, "SELECT NodeID,NodeName FROM Nodes WHERE ParentID='1'") 
      Dim JaggedArray As String()() = New String(ds.Tables(0).Rows.Count - 1)() {} 
      Dim i As Integer = 0 
      For Each rs As DataRow In ds.Tables(0).Rows 
       Dim node As New Nodes() 
       node.NodeId = rs("NodeId").ToString 
       node.NodeName = rs("NodeName").ToString 
       details.Add(node) 
       'JaggedArray(i) = New String() {rs("NodeName").ToString(), rs("NodeID").ToString()} 
       i = i + 1 
      Next 
     End Using 
     Dim js As New JavaScriptSerializer() 
     Dim strJSON As String = js.Serialize(details.ToArray) 
     Return strJSON 

    End Function 

AJAX Appel

<script src="js/jquery-1.7.1.min.js" type="text/javascript"></script> 
<script type="text/javascript"> 
    $(document).ready(function() { 
     //alert("!!!"); 
     $.ajax({ 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      url: "Default2.aspx/getCategories", 
      data: "{}", 
      dataType: "json", 
      success: function(data) { 
       var nodes = eval(data); 
       alert(data.NodeName); 
       $('#output').text(data.d); 
       $.each(data.d, function(index, node) { 
       $('#output').append('<p><strong>' + node.NodeName + ' ' + 
          node.NodeID + '</strong><br /> '); 
       }); 
      }, 
      error: function(result) { 
       alert("Error"); 
      } 
     }); 
    }); 
</script> 

Comment t o boucle en data.d pour obtenir les valeurs? data.d.length me donne 219 mais il devrait être 4? Qu'est-ce que je fais mal??

Répondre

1

vous pouvez utiliser $ .map pour E.G.

$(document).ready(function() { 
    $.ajax({ 
     type: "POST", 
     url: "/--service--", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     async: false, 
     success: function (data) { 
      $.map(data.d, function (item) { 
       $("#name").append('<option value=' + item.ID+ '>' + item.Name + '</option>'); 
      }); 
     } 
    }); 
}); 
+0

Désolé, cela ne fonctionne pas .. j'ai mis à jour ma question avec le «Ajax Call» ... s'il vous plaît vérifier. – Monodeep

+1

première méthode de création qui renvoie la liste d'objets n'a pas besoin de renvoyer jsons-string. –

+1

et essayez à nouveau d'alerte en utilisant 'alerte (JSON.stringify (données));' maintenant ce qu'il retourne? –

1

Vous pouvez parcourir data.d en utilisant:

$.each(data.d, function(index, Value) 
{ 
     // 
}); 

Mais comme vous retournez une chaîne, donc je pense que cela ne fonctionnera pas pour vous, son meilleur que vous retourniez un tableau de chaîne. ====================== EDIT =================== Faire un nouveau cours comme:

public class MyClass 
{ 
     public MyNodes as Nodes() 
} 

et dans votre code de getCategories le faire comme:

Dim details As New List(Of Nodes)() 
    Dim index As New Default2 
Dim myObj As New MyClass 
    Using ds As Data.DataSet = index.db.ExecuteDataSet(CommandType.Text, "SELECT NodeID,NodeName FROM Nodes WHERE ParentID='1'") 
     Dim JaggedArray As String()() = New String(ds.Tables(0).Rows.Count - 1)() {} 
     Dim i As Integer = 0 
     For Each rs As DataRow In ds.Tables(0).Rows 
      Dim node As New Nodes() 
      node.NodeId = rs("NodeId").ToString 
      node.NodeName = rs("NodeName").ToString 
myObj.Add(node) 
      'details.Add(node) 
      'JaggedArray(i) = New String() {rs("NodeName").ToString(), rs("NodeID").ToString()} 
      i = i + 1 
     Next 
    End Using 
    Dim js As New JavaScriptSerializer() 
    Dim strJSON As String = js.Serialize(myObj) 
    Return strJSON 

Je suis un gars C# pas un gars VB.NET pourrait donc être il y a un problème dans le code, que je suis Bien sûr, vous pouvez vérifier

+0

Comment puis-je retourner un tableau de chaîne ?? – Monodeep