0

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

ウェブサービス

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

値を取得するためにループする方法はdata.d? data.d.length私に与えます219が、それは 4 でなければなりませんか?私は何を間違っていますか??

4

2 に答える 2

1

EG に $.map を使用できます

$(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>');
            });
        }
    });
});
于 2012-09-18T10:17:24.743 に答える
1

次を使用して data.d をループできます。

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

ただし、文字列を返すので、うまくいかないと思うので、文字列の配列を返す方がよいでしょう。=======================EDIT==================== 新しいクラスを次のように作成します。

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

私はVB.NETの人ではなくC#の人なので、コードに問題がある可能性があります。確認できると確信しています

于 2012-09-18T10:25:28.383 に答える