2010-08-09 133 views
2

我有一個MVC頁面的相對簡單的例子,它使用jQuery創建POST來獲取一些JSON數據,然後在完成時顯示成功/失敗消息。該代碼在其他瀏覽器中工作得很好,但在IE7/8中,它似乎失敗了4/5次。

這裏是MVC查看頁:

<asp:Content runat="server" ContentPlaceHolderID="MainContent"> 
    <p id="message"></p> 
</asp:Content> 

<asp:Content runat="server" ContentPlaceHolderID="HeadContent"> 
    <script type="text/javascript" src="<%= Url.Content("~/Scripts/jquery-1.4.1.min.js") %>"></script> 

    <script type="text/javascript"> 
    $(document).ready(function() { 
     $.ajax({ 
      type:"POST", 
      url: "<%= Url.Action("GetData") %>", 
      data: "{}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function(data){ 
       $("#message").html("success"); 
      }, 
      error: function(XMLHttpRequest, textStatus, errorThrown){ 
       $("#message").html("error: " + textStatus + "<br/>exception:" + errorThrown); 
      } 
     }); 
    }); 
    </script> 
</asp:Content> 

控制器是非常簡單的,以及:

[HttpPost] 
public ActionResult GetData() 
{ 
    IList<string> people = new List<string> 
    { 
     "A", 
     "B", 
     "C", 
     "D", 
     "E" 
    }; 

    return Json(people); 
} 

似乎在IE 4失敗了,大約每5倍。我在控制器中放置了一些日誌代碼,並且每次都調用控制器操作,即使它失敗了。有沒有人看到我在這裏做錯了什麼?

當它碰到我的錯誤處理函數時,textStatus被設置爲「error」,errorThrown未定義。

+0

嘗試使用'{}'(或'null')而不是'「{}」'作爲數據。不知道是否這是問題,但發送'「{}」'我不相信會轉化爲有效的鍵/值對。編輯:剛剛意識到你發送JSON的動作,但除非你有一個JSON活頁夾設置,這可能是問題 – 2010-08-09 22:05:15

+0

這工作!如果您想將其作爲答案提交,我會將其標記爲已回答。 – Dismissile 2010-08-09 22:08:51

回答

2

請以{}(或null)代替"{}"作爲數據。

當您發送JSON到動作(contentType設置爲JSON)時,除非您設置了JSON值提供程序工廠,否則可能是問題的原因。

看看菲爾哈克的文章Sending JSON to an ASP.NET MVC Action Method Argument如果這是你想做的事情。