我有一个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
答案 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调用。