我有一个用[DataContract]属性修饰的对象,我的WCF服务将其返回为JSON,如下所示:
{"GetCommentsByPostResult":[{"CommentCreated":"\/Date(1305736030505+0100)\/","CommentText":"Comment 1"},{"CommentCreated":"\/Date(1305736030505+0100)\/","CommentText":"Comment 2"},{"CommentCreated":"\/Date(1305736030505+0100)\/","CommentText":"Comment 2"}]});
我试图用这个jQuery代码遍历CommentCreated:
$(data).each(function ()
{
alert(this.CommentCreated);
});
但我得到的是一个警告框,其中包含'未定义',因此我将其更改为:
$(data).each(function () {
$(this.GetCommentsByPostResult).each(function () {
alert(this.GetCommentsByPostResult);
});
});
但仍然无效。我想要做的是迭代CommentCreated并将它们扔到一个警告框....
答案 0 :(得分:3)
我不确定,但在调用this
时,我认为each
不是当前元素。另外,为什么要使用jQuery函数包装data
变量? jQuery集合用于DOM元素。
$.each(data.GetCommentsByPostResult, function (e) {
alert(e.CommentCreated);
});
答案 1 :(得分:0)
根据您获取数据的方式(库?自定义代码?),您很可能必须首先将JSON字符串转换为实际的JavaScript对象。许多浏览器都有内置的方法来执行此操作,但您可能需要利用第三方库来利用那些没有开箱即用支持的库。我建议使用JSON-js,因为它遵循与某些浏览器中内置的语法相同的语法。
var obj = JSON.parse(data);
拥有此对象后,您现在可以使用标准JavaScript点或括号表示法访问数据:
var comments = obj.GetCommentsByPostResult; // or...
var comments = obj['GetCommentsByPostResult'];
这两行是等价的。要迭代评论,您可以尝试:
$.each(obj.GetCommentsByPostResult, function (e) {
alert(e.CommentCreated);
});
另外,我建议使用console.log()而不是alert(),以及支持检查已记录对象的浏览器。这将是具有Firebug扩展的FireFox,或带有开发人员工具的Chrome(Ctrl-Shift-J激活)。不确定IE9中此类工具的状态,但如果有同等工具,我也不会感到惊讶。