Сбой вызова Internet Explorer $ .ajax / MVC JSON - PullRequest
2 голосов
/ 10 августа 2010

У меня есть относительно простой пример страницы 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 не определена.

1 Ответ

2 голосов
/ 10 августа 2010

Попробуйте использовать {} (или null) вместо "{}" в качестве данных.

Когда вы отправляете JSON в действие (contentType имеет значение JSON), если у вас не настроена фабрика провайдеров значений JSON, это может быть причиной проблемы.

Взгляните на статью Фила Хаака о Отправка JSON в Аргумент метода действия ASP.NET MVC , если вы заинтересованы в этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...