2012-02-13 100 views
1

在我的asp.net mvc项目中尝试我的一点点JSON。我有以下观点:从asp.net获取JSON不会使用getJSON返回任何内容

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

观察认为我得到我的第一次尝试警报,显示“加载”,但然后它停止,我从来没有进入回调函数,我测试了我用控制器使用断点,所以结果似乎是正确的。网络完全是这样的,我错过了什么?

回答

3

默认情况下JSON不允许用于GET动词,这是您用于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应用程序用于在重新安装操作系统时下载网络浏览器)并查看Network选项卡。你会看到你的AJAX请求和来自服务器的响应。您还将看到服务器返回的HTTP状态代码。只需展开回复并阅读服务器发送给您的错误消息。在这个非常特殊的情况下,它甚至会告诉你如何解决这个问题。

关于你的代码的另一个旁注。绝对不会硬编码像这样的URL中的ASP.NET MVC应用程序:

$.getJSON('/Students/LoadYearRoot', ... 

始终,并与网址ASP.NET MVC应用程序打交道时,这样的绝对经常使用的网址助手:

$.getJSON('@Url.Action("LoadYearRoot", "Students")', ... 

原因是您的代码不再依赖于您在Global.asax中配置的路由,并且除了在IIS中的虚拟目录中部署应用程序时它甚至可以工作,在这种情况下您需要预先安装应用程序名称。

+0

谢谢,它现在有效。并感谢网址的伟大建议,它非常有用。 – 2012-02-13 21:01:34

相关问题