2010-08-09 135 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如果这是你想做的事情。