2012-02-13 70 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

相關問題