2012-09-18 124 views
0

data.d =循环通过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调用

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

如何牛逼o通过data.d循环获取值? data.d.length给我219但它应该是4?我究竟做错了什么??

回答

1

您可以使用$ .map for 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

对不起,它不工作..我用'Ajax Call'更新了我的问题...请检查它。 – Monodeep

+1

首先创建返回对象列表的方法,不需要返回jsons-string。 –

+1

蚂蚁尝试使用警报再次警报(JSON.stringify(数据));'现在它返回什么? –

1

你可以通过data.d循环利用:

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

但是当你正在返回一个字符串,所以我认为它不会为你工作,其更好您返回数组串。 =======================编辑==================== 建立一个新的班级像:

public class MyClass 
{ 
     public MyNodes as Nodes() 
} 

,并在您的getCategories代码做这样:

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 

我是一个C#的家伙不是VB.NET家伙,所以可能会出现在代码中的一些问题,我当然你可以检查

+0

如何返回字符串数组? – Monodeep