在jQuery AJAX Success Callback中解析JSON List(通过C#)

我正在使用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( '' + '' + data[i].TicketId + '' + '' + data[i].Title + '' + '' + data[i].PriorityId + '' + '' + data[i].OpenDateAndTime + '' + '' + data[i].SlaExpiration + '' + '' ); } }, 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 …

我关注这篇文章: Parse在AJAX成功函数中返回了C#列表

如果您尝试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)) { ... } } 
 $.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( '' + '' + list[i].TicketId + '' + '' + list[i].Title + '' + '' + list[i].PriorityId + '' + '' + list[i].OpenDateAndTime + '' + '' + list[i].SlaExpiration + '' + '' ); } }, error: function () { alert("Error occured!!") } }); 

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