【问题标题】:JSON result containing only one itemJSON 结果仅包含一项
【发布时间】:2009-09-13 17:58:16
【问题描述】:

我可能缺少 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"}]

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

在寻找这个问题的答案时,我有点不知所措。任何解决方案将不胜感激。

【问题讨论】:

    标签: javascript asp.net-mvc json


    【解决方案1】:

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

    {"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>");
    });
    //..
    

    【讨论】:

    • 这听起来不错。 Maxfriebe 应该拿出萤火虫并非常仔细地查看他的数据。
    • 很棒的答案!我和 OP 有同样的问题,这就像一个魅力。我不知道each() 会遍历一个对象的属性,如果只提供一个对象供它迭代。
    【解决方案2】:

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

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

    在您的情况下使用 THIS 关键字会造成混淆

    希望对你有帮助

    【讨论】:

      【解决方案3】:

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

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

      之所以有效,是因为那时数据是一个对象。不知道为什么当有多个结果时它会为你做一个评估。

      【讨论】:

      • 如果你的数据只是一个字符串,你应该在你的 ajax 请求中使用 dataType: 'json' 选项,或者使用 getJSON 函数
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-16
      • 1970-01-01
      • 2014-11-30
      相关资源
      最近更新 更多