我正在使用jQuery的getJSON函数从 Controller 页面返回JsonResult。
这是网页中的jQuery代码:
$.getJSON("/Test/GetJsonWFA", null, function (data) {
$(data).each(function () {
alert("call succeeded");
//alert(data);
});
这是 Controller 代码:
public JsonResult GetJsonWFA() {
List<WorkFlowAssignment> listWFAs = new List<WorkFlowAssignment>();
listWFAs.Add(new WorkFlowAssignment() { ID = 1, WorkFlowName = "WorkFlowName1" });
listWFAs.Add(new WorkFlowAssignment() { ID = 2, WorkFlowName = "WorkFlowName2" });
return Json(listWFAs, JsonRequestBehavior.AllowGet);
}
我收到以下错误: 500 Internal Server Error 。
如果我将琐事类替换为 GetJsonWFA 中的 WorkFlowAssignment ,则一切正常。
它似乎与列表中的对象类型有关。
WorkFlowAssignment 类具有许多属性和方法。
谁能指出我正确的方向?
最佳答案
我怀疑您的WorkFlowAssignment
模型具有一些无法通过JSON序列化的循环引用。我建议您使用 View 模型并中断所有可能的循环引用。使用 View 模型的另一个优点是,您将仅将其实际需要的属性发送给客户端以进行处理。您不需要通过电线转移客户将不需要的一些复杂的东西。因此,例如,如果您的客户所需的一切都是ID
和WorkFlowName
,请执行以下操作:
public ActionResult GetJsonWFA() {
List<WorkFlowAssignment> listWFAs = ...
var viewModel = listWFAs.Select(x => new {
ID = x.ID,
WorkFlowName = x.WorkFlowName
});
return Json(viewModel, JsonRequestBehavior.AllowGet);
}
并在客户端上:
$.getJSON("/Test/GetJsonWFA", null, function (data) {
$.each(data, function (index, item) {
alert('ID = ' + item.ID + ', WorkFlowName = ' + item.WorkFlowName);
});
});
另外,您还应该使用FireBug或Developer Toolbar等调试工具来检查浏览器发送的AJAX请求,并分析服务器响应中是否存在最终错误。当AJAX请求失败时,作为开发人员的第一反应应该是启动调试工具,并确切查看正在发送的请求/响应。