【问题标题】:Accessing fields in a JSON response访问 JSON 响应中的字段
【发布时间】:2014-11-08 16:42:56
【问题描述】:

我有一个这样定义的类:

// the Widget class has lots of properties I don't want to display
// so I use the displayWidget class to carry just what I want to display
public class displayWidget
{
    public string WidgetId {get; set;}
    public string Description {get; set;}

    public displayWidget(Widget widget)  
    {
        WidgetId = widget.WidgetId;
        Description = widget.Description;
    }
}

我有一个以:: 结尾的 ActionResult 方法

var widgets = new List<displayWidget>();
foreach (var widget in matchingWidgets)
{
    widgets.Add(new displayWidget(widget));
}
return Json(widgets);

我的问题是,我不知道如何访问 ajax .done 处理程序中的 WidgetId 和 Description 属性:

.done(
    function(response) {
        $('#widgetSection').html('');
        var html = '';
        var jsonData = JSON.parse(response);
        $.each(jsonData, 
            function (index, element) 
            { 
                $('body').append($('<div>', { text: element.WidgetId })); 
                $('body').append($('<div>', { text: element.Description }));
            });
    }
)

.each 函数中应该包含什么来输出 WidgetId 和 Description?

【问题讨论】:

  • 返回什么 element.WidgetId/element.Description?
  • 我不知道...我知道响应包含我期望的内容,但现在 JSON.parse(response) 返回错误 0x800a03f6 - JavaScript 运行时错误:无效字符
  • 不要'用户 JSON.parse。试试 $.each(response,function(){});

标签: javascript asp.net-mvc json asp.net-ajax


【解决方案1】:

您的 ActionResult 正在返回一个数组,请尝试:

element[0].WidgetId

这将返回第一个结果,如果需要,您可以轻松地遍历列表。

编辑

正如@StephenMuecke 提到的,您不需要在此处使用JSON.parse,因为您已经返回JSON 数据,因此这样的内容足以循环遍历结果:

.done(
    function(response) {
        $('#widgetSection').html('');
        $.each(response, function (index, element) { 
            $('body').append(
                $('<div></div>').text(element.WidgetId )
            )
        });
    }
)

【讨论】:

  • 这不是必须的。所需要的只是$.each(response, function (index, element) { $('body').append($('&lt;div&gt;&lt;/div&gt;').text(element.WidgetId ))}); 响应值已经是 JSON,所以它不应该被解析
  • 同意,但他的问题是如何访问数据,这就是我所解释的。我假设如果他知道这是一个数组(这是我已经解释过的),那么他可以从那里开始使用它。我将使用此信息更新答案,但为任何其他用户清楚起见。
猜你喜欢
  • 2020-09-29
  • 1970-01-01
  • 2021-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-19
相关资源
最近更新 更多