使用通过使用Newtonsoft.Json发送的jQuery处理json数据

时间:2013-07-19 19:53:32

标签: javascript jquery json

我已尝试搜索所有可能的问题匹配,并尝试了几种解决方案,但遗憾的是没有解决方案
  我的后端代码:

Person p;
        foreach(DataRow dr in dt.Rows)
        {
            p = new Person();
            p.id = Convert.ToInt16(dr["Id"]);
            p.name = dr["Name"].ToString();
            p.phone = Convert.ToInt64(dr["Phone"]);

            pList.Add(p);
        }
        string ans = JsonConvert.SerializeObject(pList, Formatting.Indented);  

jQuery.ajax

function ShowData() {
            $.ajax({
                type: "POST",
                contentType: "application/json; charset=utf-8",
                url: "Default.aspx/Data",
                data: "{}",
                dataType: "json",
                success: function (data) {
                    alert(data.d);
                    var list = { "Person": +data };
                    for (i = 0; i < list.Person.length; i++) {
                        alert('Id: ' + list.Person[i].Id + '/nName: ' + list.Person[i].Name + '/nPhone: ' + list.Person[i].Phone);
                        console.log('Id: ' + list.Person[i].Id + '/nName: ' + list.Person[i].Name + '/nPhone: ' + list.Person[i].Phone);
                    }
                    console.log(list.Person.length);
                },
                error: function (result) {
                    alert("Error");
                }
            });
        }  

警报输出

[

  {

    "id": 1,

    "name": "Bhavik",

    "phone": 9601109585

  },

  {

    "id": 2,

    "name": "Xyz",

    "phone": 1234567890

  },

  {

    "id": 3,

    "name": "Abc",

    "phone": 9876543210

  }

]  

console.log(list.Person.length);返回undefined,因此不会进入for循环。所以要解决它..为什么在contentType已经存在时需要指定dataType ..我也可以使用$.getJSON代替$ .ajax。

2 个答案:

答案 0 :(得分:3)

您应该将代码更改为var list = {“Person”:data.d};反映出你正在发出的警报。

function ShowData() {
            $.ajax({
                type: "POST",
                contentType: "application/json; charset=utf-8",
                url: "Default.aspx/Data",
                data: "{}",
                dataType: "json",
                success: function (data) {
                    alert(data.d);
                    var list = { "Person": +data.d };
                    for (i = 0; i < list.Person.length; i++) {
                        alert('Id: ' + list.Person[i].Id + '/nName: ' + list.Person[i].Name + '/nPhone: ' + list.Person[i].Phone);
                        console.log('Id: ' + list.Person[i].Id + '/nName: ' + list.Person[i].Name + '/nPhone: ' + list.Person[i].Phone);
                    }
                    console.log(list.Person.length);
                },
                error: function (result) {
                    alert("Error");
                }
            });
        }  

答案 1 :(得分:0)

此外,这应该是GET请求而不是帖子,那么您就可以使用$ .getJSON。