JSON结果只包含一个项目

时间:2009-09-13 17:58:17

标签: javascript asp.net-mvc json

我可能会错过json和javascript的内容。

[{"commentText":"Testing 123","userPosted":"maxfridbe"},
{"commentText":"Testing 23","userPosted":"maxfridbe"}]

有时我会得到多个与此代码一致的响应:

function(data) 
        {
            var sel = this;

            jQuery.each(data,
                function()
                {
                    sel.append("<li>"+ this.userPosted+ "-" + this.commentText + "</li>");
                });          
        };

有时我只得到一个违反上述代码的回复:

[{"commentText":"another test again welcom","userPosted":"maxfridbe"}]

我知道这是因为答案的处理方式与列表不同。

寻找答案,我得到了一些解决方法。任何解决方案都将不胜感激。

3 个答案:

答案 0 :(得分:7)

在你提供的第二个例子中,它似乎只是一个只包含一个项目的数组,如果是这样,它应该可以工作,但我认为你只得到一个像这样的对象:

{"commentText":"another test again welcom","userPosted":"maxfridbe"}

如果是单个对象$.each则迭代对象属性。

您可以使用$.isArray检查您的data变量是否不是数组,如果不是,则可以将其包装到单个元素数组中,因此$.each函数仍然会按预期工作:

//..
if (!jQuery.isArray(data))  data = [data]; // if isn't an array, wrap it

jQuery.each(data, function() {
  sel.append("<li>"+ this.userPosted+ "-" + this.commentText + "</li>");
});
//..

答案 1 :(得分:1)

我认为你应该在each()函数中使用一些可选参数:

function(data) 
    {
        var sel = this;

        jQuery.each(data,
            function(i, item)
            {
                sel.append("<li>"+ item.userPosted+ "-" + item.commentText + "</li>");
            });          
    };

使用THIS关键字会在您的案例中造成混淆

希望这有帮助

答案 2 :(得分:0)

使用CMS的解决方案让我意识到数据只是一个字符串,所以:

if (!jQuery.isArray(data))  data = eval(data);

工作,因为那时数据是一个对象。不确定为什么当有多个结果时它会为你做一个评估。