将数据从Json字符串转换为javascript(jQuery)

时间:2014-06-10 13:10:06

标签: javascript jquery json

我有一个asp.net webservice,它从我的数据库中提取一些数据,然后输出这个JSON字符串:

{
"NumberOfCustomers": 15,
"Customer": [
    {
        "CusID": "1",
        "FirstName": "Ina",
        "LastName": "Williamson"
    },
    {
        "CusID": "2",
        "FirstName": "Hyacinth",
        "LastName": "Brady"
    },
    {
        "CusID": "3",
        "FirstName": "Coby",
        "LastName": "Shannon"
    }
]
  

}

然后我尝试使用jQuery来显示每个客户,但我无法使其正常运行。这样做的目的是使用数据作为搜索字段的建议,为每个写入的字符更新。

function FinalTest() {
            $.ajax({
                type: "POST",
                url: "http://localhost:12724/VetWebservice.asmx/GetCustomer",
                data: "{}", 
                contentType: "application/json; charset=utf-8", 
                dataType: "json", 
                success: function (data) {
glb = data; //variable for inspecting in Chrome
                    $("#testdiv3").html(data.d.NumberOfCustomers);
                    $.each(data.d.Customer, function () {
                        $("#testdiv3").append(this.CusID + ", ");
                    });


                }
            });
        };

给我这个错误:

  

TypeError:a未定义

     

jquery.min.js(linje 2)

它与指向JSON数组的特定部分有关。但我无法弄清楚它为什么不起作用。

" d" data.d路径,是因为asp.net webservice出于某种未知原因将其包装在d键属性中。

  

data.d.NumberOfCustomers

它也可以改变我从我的webservice创建的JSON字符串,如果这有助于以某种方式解决它。但我的JSON语法在jsonlint.com

上验证

任何帮助或建议都将受到高度赞赏。


编辑:添加了glb对象以检查来自Chrome的结果

检查" glb"给出了这个结果:

Object {d: "{"NumberOfCustomers":15, "Customer":[{"CusID":"1",…D":"15","FirstName":"Adele","LastName":"Woods"}]}"} 

看起来像我期待的那样;包裹在" d" asp.net webservice的属性原因。

在Chrome中运行我的jquery代码段时,我也会收到此错误:

Uncaught TypeError: Cannot read property 'length' of undefined jquery.min.js:2
n.extend.each jquery.min.js:2 
FinalTest.$.ajax.success Customers.aspx:226 
j jquery.min.js:2 
k.fireWith jquery.min.js:2 
x jquery.min.js:4 
b jquery.min.js:4

2 个答案:

答案 0 :(得分:0)

您应该使用

data.NumberOfCustomers

而不是

data.d.NumberOfCustomers 

data.Customer 

而不是

data.d.Customer 

答案 1 :(得分:0)

我在chrome控制台中尝试了以下代码并且它有效:

data = {
"NumberOfCustomers": 15,
"Customer": [
    {
        "CusID": "1",
        "FirstName": "Ina",
        "LastName": "Williamson"
    },
    {
        "CusID": "2",
        "FirstName": "Hyacinth",
        "LastName": "Brady"
    },
    {
        "CusID": "3",
        "FirstName": "Coby",
        "LastName": "Shannon"
    }
]}


$.each(data.Customer,function() { alert(this.CusID); });

我记得asp.net webmethod把结果放在属性d中,但也​​许它的结构与你期望的有点不同。 我建议在全局var中添加一个赋值,从服务返回的值并使用控制台对其进行调查。

在ajax成功添加行的函数头部如下:

glb = data; //glb will be a global scope var which you can investigate on console upon end of execution.

比在Chrome控制台上只需输入glb并按回车键。然后你就可以调查对象并尝试每个函数而不进行ajax调用。