在我的asp.net mvc项目中尝试使用一点JSON。我有以下观点:
<asp:Content ID="Content3" ContentPlaceHolderID="NavigationPlaceholder" runat="server">
<script type="text/javascript">
$(document).ready(function () {
alert('loaded');
$.getJSON('/Students/LoadYearRoot', null, function (data, textStatus) {
alert('test');
});
});
</script>
</asp:Content>
和以下控制器(请注意我注释掉了我的数据库调用,只是尝试使用字符串。:
public JsonResult LoadYearRoot()
{
GWSSchool school = SchoolHelper.GetSchool();
//List<GWSYear> years = yearRepository.GetAll(school.Id);
List<string> strings = new List<string>() { "first", "second", "third" };
JsonResult result = this.Json(strings);
return result;
}
观察视图我得到了我的第一个警报,显示“已加载”,但随后停止,我从未进入回调函数,我测试了我使用断点击中控制器,因此结果似乎正确。
任何想法,我在网上找到的所有例子都是这样的,我缺少什么?
答案 0 :(得分:3)
默认情况下,GET动词不允许使用JSON,这是您用于AJAX请求的$.getJSON
)。为了启用它,您可以将JsonRequestBehavior.AllowGet
值传递给控制器操作中的Json方法:
JsonResult result = this.Json(strings, JsonRequestBehavior.AllowGet);
下次当您的某个AJAX请求无效而不是直接在StackOverflow上发布问题时,只需在您喜欢的浏览器中打开您的javascript调试工具(FireFox中的FireBug,Google Chrome中的Chrome开发者工具,我不会知道IE中的内容 - 事实上不使用IE开发Web应用程序 - 我对IE的定义如下: Microsoft开发的Windows应用程序用于在重新安装操作系统时下载Web浏览器)并查看Network
标签。在那里,您将看到来自服务器的AJAX请求和响应。您还将看到服务器返回的HTTP状态代码。只需展开响应并阅读服务器发送给您的错误消息。在这个非常具体的案例中,它甚至会告诉你如何解决这个问题。
关于您的代码的另一个旁注。绝对不要在ASP.NET MVC应用程序中硬编码这样的URL:
$.getJSON('/Students/LoadYearRoot', ...
总是,并且在处理ASP.NET MVC应用程序中的URL时绝对总是使用url助手,如下所示:
$.getJSON('@Url.Action("LoadYearRoot", "Students")', ...
原因是您的代码不再依赖于您在Global.asax中配置的路由,除此之外,当您在IIS中的虚拟目录中部署应用程序时,它甚至可以工作,在这种情况下您需要添加应用程序名称。