Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 返回JsonResult会导致500个内部服务器错误_Javascript_Jquery_Asp.net Mvc_Json - Fatal编程技术网

Javascript 返回JsonResult会导致500个内部服务器错误

Javascript 返回JsonResult会导致500个内部服务器错误,javascript,jquery,asp.net-mvc,json,Javascript,Jquery,Asp.net Mvc,Json,我使用jQuery的getJSON函数从我的控制器页面返回一个JsonResult 以下是网页中的jQuery代码: $.getJSON("/Test/GetJsonWFA", null, function (data) { $(data).each(function () { alert("call succeeded"); //alert(data); }); 这是控制器代码: public J

我使用jQuery的getJSON函数从我的控制器页面返回一个JsonResult

以下是网页中的jQuery代码:

    $.getJSON("/Test/GetJsonWFA", null, function (data) {
        $(data).each(function () {
            alert("call succeeded");
            //alert(data);
        });
这是控制器代码:

    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);

    }
publicjsonresult GetJsonWFA(){
List listWFAs=新列表();
添加(新的WorkFlowAssignment(){ID=1,WorkFlowName=“WorkFlowName1”});
添加(新的WorkFlowAssignment(){ID=2,WorkFlowName=“WorkFlowName2”});
返回Json(listWFAs、JsonRequestBehavior.AllowGet);
}
我收到以下错误:500内部服务器错误

如果我用一个普通类替换GetJsonWFA中的WorkFlowAssignment,那么一切都会正常工作

它似乎与列表中对象的类型有关

WorkFlowAssignment类具有许多属性和方法


有人能给我指出正确的方向吗?

我怀疑您的
WorkFlowAssignment
模型有一些无法JSON序列化的循环引用。我建议您使用视图模型并打破任何可能的循环引用。使用视图模型的另一个优点是,您将只向客户机发送处理实际需要的属性。您不需要通过网络传输客户永远不需要的复杂内容。因此,例如,如果您的客户需要的所有东西都是
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);
}

此外,您还应该使用诸如FireBug或Developer Toolbar之类的调试工具来检查浏览器发送的AJAX请求,并分析服务器响应是否存在最终错误。当AJAX请求失败时,作为开发人员,您的第一反应应该是启动调试工具,查看发送的请求/响应。

500内部服务器错误-可能表明
GetJsonWFA
函数失败-您是否尝试过单步执行该函数?启动Chrome的开发工具,查看当它发生时,500个内容。这应该包括一个堆栈跟踪。@ipr101-单步执行时,该函数工作正常-当尝试对列表进行按摩以返回JsonResult时,该方法似乎失败了。谢谢Darin-这就是我在Firebug的XHR选项卡中看到500服务器错误的地方。但是我明白你关于视图模型的观点,我会尝试一下。谢谢@Darin-调整了视图模型对象,使它们更简单,而且效果很好。
$.getJSON("/Test/GetJsonWFA", null, function (data) {
    $.each(data, function (index, item) {
        alert('ID = ' + item.ID + ', WorkFlowName = ' + item.WorkFlowName);
    });
});