jQuery/Javascript 从对象中提取信息

jQuery/Javascript pulling info from an object

提问人:Eli 提问时间:9/2/2009 更新时间:9/2/2009 访问量:201

问:

我正在尝试使用以下代码从Ajax调用返回的一些json中创建客户端名称列表。

数据如下:

{“status”:1,“data”:{“clients”:[{“ClientID”:“1”,“AccountID”:“1”,“ClientName”:“访问贷款缓解”,“Active”:“1”},{“ClientID”:“2”,“AccountID”:“1”,“ClientName”:“Big Time Business”,“Active”:“1”},{“ClientID”:“3”,“AccountID”:“1”,“ClientName”:“Bill Releford”,“Active”:“1”},{“ClientID”:“4”,“AccountID”:“1”,“ClientName”:“Bonnie Silverman”,“Active”:“1”},{“ClientID”:“5”,“AccountID”:“1”,“ClientName”:“Dear Holdings”,“Active”:“1”},{“ClientID”:“6”,“AccountID”:“1”,”ClientName“:”平静牙科“,”Active“:”1“},{”ClientID“:”7“,”AccountID“:”1“,”ClientName“:”Eva Field“,”Active“:”1“},{”ClientID“:”8“,”AccountID“:”1“,”ClientName“:”First Independent Pictures“,”Active“:”1“},{”ClientID“:”9“,”AccountID“:”1“,”ClientName“:”Gallery 825“,”Active“:”1“},{”ClientID“:”10“,”AccountID“:”1“,”ClientName“:”Greenway Arts Alliance“,”Active“:”1“},{”ClientID“:”11“,”AccountID“:”1“,”ClientName“:”International Strategy Group“,”Active“:”1“},{”ClientID”:“12”,“AccountID”:“1”,“ClientName”:“Ramtin”,“Active”:“1”},{“ClientID”:“13”,“AccountID”:“1”,“ClientName”:“Spabro”,“Active”:“1”},{“ClientID”:“14”,“AccountID”:“1”,“ClientName”:“LMGA”,“Active”:“1”},{“ClientID”:“15”,“AccountID”:“1”,“ClientName”:“Main Street Business Association”,“Active”:“1”},{“ClientID”:“16”,“AccountID”:“1”,“ClientName”:“Rabbit Animation”,“Active”:“1”},{“ClientID”:“17”,“AccountID”:“1”,“ClientName”:“Rooms & Gardens”,“Active”:“1”},{”ClientID“:”18“,”AccountID“:”1“,”ClientName“:”夏日“,”Active“:”1“},{”ClientID“:”19“,”AccountID“:”1“,”ClientName“:”Sue Shellock“,”Active“:”1“},{”ClientID“:”20“,”AccountID“:”1“,”ClientName“:”Susan Gates“,”Active“:”1“},{”ClientID“:”21“,”AccountID“:”1“,”ClientName“:”The Park Entertainment“,”Active“:”1“},{”ClientID“:”22“,”AccountID“:”1“,”ClientName“:”统一调度“,”Active“:”1“},{”ClientID“:”23“,”AccountID“:”1“,”ClientName“:”Westside Media Group“,”Active“:”1“},{”ClientID“:”24“,”AccountID“:”1“,”ClientName“:”YHD“,”Active“:”1“},{”ClientID“:”25“,”AccountID“:”1“,”ClientName“:”Discoverfire, Inc.“,”Active“:”1“}]}}

代码是这样的:

        for (var Client in o.data.clients) {
            $('#list_container').append("<div>"+Client.ClientName+"</div>");
        }

不太有效,我尝试了几种不同的方法来访问 ClientName 属性。Javascript 不是我最强的语言,从对象中获取数据只会杀死我 - 习惯于 PHP 对象和数组。

我确定这很简单 - 有人可以显示正确的语法吗?

谢谢!

JavaScript jQuery

评论

0赞 bobince 9/2/2009
此外,“<div>”+Client.ClientName+“</div>”是错误的(对于名称中带有“&”的客户)和潜在的危险(对于名称为“Terry <script>CookieStealer()</script> 和 Sons Ltd.”的客户)。创建一个 div 元素,设置 $(div).text(Client.ClientName),然后将其添加到容器中。将字符串连接到 HTML 中几乎总是错误的事情。
0赞 Eli 9/2/2009
谢谢!我知道这一点,但想要一个干净的演示。不过,提出来是件好事。

答:

2赞 seth 9/2/2009 #1

Clients 是一个数组,因此最好在其上使用 jQuery 的每个数组:

$.each( o.data,clients, function(idx, client) {
   // use client.ClientName here
});

评论

0赞 Eli 9/2/2009
我可以看到我将不得不更仔细地检查jQuery的实用程序。美丽 - 谢谢!
0赞 seth 9/2/2009
谢谢,玩得开心。它有很多方便的。
2赞 VoteyDisciple 9/2/2009 #2

这并不完全是循环的工作方式。解决此问题的更简单、更准确、更可靠的方法是使用传统语法,如下所示:forfor

for (var i = 0; i < o.data.clients.length; i++) {
    var client = o.data.clients[i];
    $('#list_container').append("<div>"+client.ClientName+"</div>");
}

你使用的语法将起作用,但它仍然迭代索引(而不是值),即使这样,它也不仅限于数组中的整数索引——它还可能包括在数组原型上定义的其他属性,甚至在特定的数组对象上。对于像这样的传统数组来说,使用无聊的语法进行迭代是一个更好的选择。fori = 0