尝试使用 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。 这不行 @VeeKeyBeeThis request has been blocked...
这是您在未设置 JsonRequestBehavior.AllowGet
时收到的错误消息。所以它接缝你的问题一直是这个,也许应用程序没有重建或者浏览器缓存了结果......使用return Json(...
将与你创建JsonResult
并手动进行序列化所做的基本相同。 ..以上是关于尝试使用 jQuery ajax 和 MVC 显示 JSONResult 时出现内部服务器错误 #500的主要内容,如果未能解决你的问题,请参考以下文章
带有 HTML.ValidationMessageFor 的 ASP.NET MVC AJAX
未使用 MVC 从 Json Result 获取 Ajax 成功方法中的 LINQ 连接查询结果,但结果显示正确
MVC 5 Ajax.BeginForm Submit按钮调用当前页面而不是指定的Controller和Action的URL