解析出ajax json的结果

我正在尝试使用以下代码解析通过json从Web服务返回的一些数据。

function getADData() { var strSearch = $('#txtSearch').val() var ajaxData = "{ 'PartNameString': '" + strSearch + "' }"; $.ajax({ type: "POST", url: "/Services/ActiveDirectoryInterop.asmx/SearchUsers", data: ajaxData, contentType: "application/json; charset=utf-8", dataType: "json", success:populateTable }); } function populateTable(result) { alert(result["d"].length); } 

返回的数据是这个。

 {"d":{"Columns":["UserID","Name","Email"],"Rows":[["U99999","Lees, Smith","someemail1@canfor.com"],["U99999","Lees, Mark","someemail1@canforpulp.com"],["99999","Lees, Bob","someemail1@canforpulp.com"],["U999999","Lees, John","someemail1@canforpulp.com"],["U999999","Lees, Jim","someemail1@canforpulp.com"]]}} 

虽然jsut返回undefined的警报是什么。 所以我知道我错过了一些东西,它可能与JSON的嵌套有关。 有人能指出我正确的方向指示一些材料或代码,告诉我如何可能遍历数据,就像我收到的那样。

试试这个:

 alert(result.d.Columns.length); 

并阅读那个古怪的’d’ 。

你在寻找行数吗? 这应该这样做:

 alert(result.d.Rows.length); 

您对哪个计数感兴趣?

你对哪个属性的长度感兴趣? 列还是行? 无论如何,这两行显示了它们中的每一个。

 alert(result.d.Columns.length); alert(result.d.Rows.length); 

正如您所看到的,我正在使用访问者运算符而不是索引器来访问属性。 但你也可以这样做:

 alert(result["d"]["Columns"].length); alert(result["d"]["Rows"].length); 

但我发现第一种方法更清洁,因为我确切地知道我正在使用Javascript对象而不是数组(Javascript对象实际上是一个关联数组,但我们不介意这些细节)。