繁体   English   中英

在jQuery AJAX成功回调中解析JSON列表(通过C#)

[英]Parse JSON List (via C#) in jQuery AJAX Success Callback

我正在使用jQuery的AJAX方法来调用C#服务以返回JSON序列化列表。

[HttpPost]
public JsonResult SearchTicket(ViewModelTicket ticket) {

    var list = UnitOfTicket.Where(x =>x.TicketId == ticket.TicketId);

    return Json(new { list  }, JsonRequestBehavior.AllowGet);
}

我从成功回调函数中解析响应,并将其呈现为HTML。

  $.ajax({ type: "POST", url: url, data: JSON.stringify(Ticket), dataType: "json", contentType: 'application/json; charset=utf-8', success: function (list) { var data = list; for (var i in data) { alert(JSON.stringify(data[i])); $('#tbody-element').append( '<tr>' + '<td>' + data[i].TicketId + '</td>' + '<td>' + data[i].Title + '</td>' + '<td>' + data[i].PriorityId + '</tr>' + '<td>' + data[i].OpenDateAndTime + '</tr>' + '<td>' + data[i].SlaExpiration + '</td>' + '</tr>' ); } }, error: function () { alert("Error occured!!") } }); 

响应显示在警报中:

[{"TicketId":1,"OpenDateAndTime":"/Date(1517833557277)/","ClosedDateTime":null,"VersionId":140,"PriorityId":2,"CompanyId":0,"UserId":null,"Rate":null,"SlaExpiration":null,"TicketTypeId":1,"StatusId":1,"ProductId":1,"SubProductId":1,"TaskId":1,"Title":"Primeiro Chamado","Files":null}]

我的问题是渲染具有未定义值的对象。 例如:data [i] .Title ...

我正在关注此帖子: 在AJAX成功函数中解析返回的C#列表

$.ajax({
    type: "POST",
    url: url,
    data: JSON.stringify(Ticket),
    dataType: "json",
    contentType: 'application/json; charset=utf-8',
    success: function (list) {
        for(var i = 0, len = list.length; i < len; i++) {
            $('#tbody-element').append(
                 '<tr>' +
                     '<td>' + list[i].TicketId + '</td>' +
                     '<td>' + list[i].Title + '</td>' +
                     '<td>' + list[i].PriorityId + '</tr>' +
                     '<td>' + list[i].OpenDateAndTime + '</tr>' +
                     '<td>' + list[i].SlaExpiration + '</td>' +
                 '</tr>'
             );
        }
    },
    error: function () {
        alert("Error occured!!")
    }
});

您的响应已被解析,这意味着您的list变量是一个数组。

如果尝试使用alert(JSON.stringify(data)) ,您会看到什么? 您的代码就像data是对象数组一样工作,但实际上它可能是充满嵌套数组的数组。

如果alert(JSON.stringify(data[i])); 正在向您显示[{"TicketId":...}] ,看起来data[i]是一个包含单个对象的数组-在这种情况下, data[i].TicketId是未定义的,但data[i][0].TicketId应该具有所需的值。 在这种情况下,全面使用data[i][0]而不是data[i]应该可以帮助您。


注意:不过,我会谨慎使用for (var i in data) ,因为如果data是一个Array并且您向Array.prototype添加了任何类型的数据(例如,polyfilled Array方法),那么它将包括在内在这个循环中。 使用起来更安全:

for (var i in data) {
    if (data.hasOwnProperty(i)) {
        ...
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM