尝试使用 jQuery ajax 和 MVC 显示 JSONResult 时出现内部服务器错误 #500

Posted

技术标签:

【中文标题】尝试使用 jQuery ajax 和 MVC 显示 JSONResult 时出现内部服务器错误 #500【英文标题】:Internal Server Error #500 while trying to display JSONResult with jQuery ajax and MVC 【发布时间】:2012-07-11 04:04:30 【问题描述】:

控制器

public JsonResult TeamInfo(string teamName)
            
                teamDA = new TeamDataAccess();
                var teamInfo = teamDA.TeamInfo(teamName);
               System.Web.Script.Serialization.javascriptSerializer oSerializer =
             new System.Web.Script.Serialization.JavaScriptSerializer();
                string sJSON = oSerializer.Serialize(teamInfo);
                JsonResult jsonResult 
=new JsonResult() JsonRequestBehavior = JsonRequestBehavior.AllowGet ; 
                    jsonResult.Data = sJSON; // first i give this.
         jsonResult.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
                    return jsonResult;
                

从 jQuery 调用控制器

$.ajax(
                url: 'Team/TeamInfo/' + teamName,
                success: function (data) 
                    $('#teamDetails').html(data);
                    alert('Load was performed.');
                    $("#dialog-modal").dialog("open");
                
            );

在调试时,我可以看到它一直执行到控制器 return jsonResult; 的最后一行,但 alert('Load was performed.'); 不可见。 你知道它没有进入成功部分的原因是什么吗?服务器端没有错误。非常感谢任何帮助。

编辑 当我在 ajax 调用中添加 error 时。它显示错误 500(内部服务器错误)。我如何找到这个问题?

【问题讨论】:

如果直接把结果作为HTML放到页面的DOM中,为什么还要发回JsonResult呢?尝试注释掉$('#teamDetails').html(data);.... 看看会发生什么。 没什么。它只是完成了控制器中的功能,并没有进入成功。是否需要在我的代码中添加? 从浏览器调用您的操作,而不是通过 ajax 调用。服务器将为您返回错误页面。或者在调试模式下运行。 是的,我遇到了问题。 This request has been blocked because sensitive information could be disclosed to third party web sites when this is used in a GET request。请查看我的更新代码 【参考方案1】:

您不需要使用 JavaScriptSerializer 制作所有序列化的东西。

您的操作方法可能如下所示:

 public JsonResult TeamInfo(string teamName)
 
      return Json(new TeamDataAccess()TeamInfo(teamName), JsonRequestBehavior.AllowGet); 
 

【讨论】:

它的作品。多谢。但为什么它在我的代码中不起作用? 我也尝试了上述方法,但它不起作用。你能告诉我有什么区别吗? 它在“敏感信息...”或其他方面返回相同的错误?【参考方案2】:

$.ajax 的默认请求类型是 GET,但默认情况下,JsonResult 不允许 GET 请求,因此您需要使用 JsonRequestBehavior 属性明确允许它们:

JsonResult jsonResult = 
    new JsonResult  JsonRequestBehavior = JsonRequestBehavior.AllowGet ;
jsonResult.Data = sJSON;

return jsonResult;

或者您可以使用 type: 'POST' 发布您的 ajax 调用

注意:仍然不清楚您将返回的 JSON 直接放入带有 $('#teamDetails').html(data); 行的 DOM 中的目标是什么

【讨论】:

我试过那个。但仍然不是。让我再检查一次。在将其放入 div 之前,我需要创建一些 HTML。 这不行 @VeeKeyBee This request has been blocked... 这是您在未设置 JsonRequestBehavior.AllowGet 时收到的错误消息。所以它接缝你的问题一直是这个,也许应用程序没有重建或者浏览器缓存了结果......使用return Json(...将与你创建JsonResult并手动进行序列化所做的基本相同。 ..

以上是关于尝试使用 jQuery ajax 和 MVC 显示 JSONResult 时出现内部服务器错误 #500的主要内容,如果未能解决你的问题,请参考以下文章

MVC 5 排序和过滤数据

使用 ko.js mvc 未显示为 html 的表数据

带有 HTML.ValidationMessageFor 的 ASP.NET MVC AJAX

未使用 MVC 从 Json Result 获取 Ajax 成功方法中的 LINQ 连接查询结果,但结果显示正确

MVC 5 Ajax.BeginForm Submit按钮调用当前页面而不是指定的Controller和Action的URL

jQuery AJAX 发布到 MVC 控制器对象——请求显示为空