2010-08-09 2 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, это может быть проблемой –

+0

Это сработало! Если вы хотите представить его в качестве ответа, я отметю его как ответ. – Dismissile

ответ

2

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

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

Посмотрите на статью Фила Хаака по адресу Sending JSON to an ASP.NET MVC Action Method Argument, если это то, что вы хотели бы сделать.

Смежные вопросы