2010-08-09 5 views
2

J'ai un exemple relativement simple d'une page MVC qui utilise jQuery pour faire un POST pour obtenir des données JSON et puis juste afficher un message succès/échec quand c'est fait. Le code fonctionne parfaitement bien dans les autres navigateurs mais dans IE7/8 il semble échouer 4/5 fois.

Voici le MVC Voir la page:

<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> 

Le contrôleur est assez simple ainsi:

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

    return Json(people); 
} 

Il semble échouer dans IE 4 sur toutes les 5 fois environ. Je mets du code de journalisation dans le contrôleur et appelle l'action du contrôleur à chaque fois, même en cas d'échec. Est-ce que quelqu'un voit quelque chose que je fais mal ici?

Lorsqu'il atteint ma fonction de gestionnaire d'erreur, textStatus est simplement défini sur "error" et errorThrown est indéfini.

+0

essayez avec '{}' (ou 'null') au lieu de' "{}" 'comme données. Je ne sais pas si c'est le problème, mais envoyer '" {} "' Je ne crois pas va traduire à une paire clé/valeur valide. Edit: Vous venez de réaliser votre envoi de JSON à l'action, mais à moins que vous n'ayez configuré un classeur JSON, cela pourrait être le problème. –

+0

Cela a fonctionné! Si vous voulez le soumettre comme réponse, je le marquerai comme répondant. – Dismissile

Répondre

2

Essayez avec {} (ou null) au lieu de "{}" comme données. Lorsque vous envoyez du JSON à l'action (contentType est défini sur JSON), sauf si vous avez configuré une fabrique de fournisseurs de valeur JSON, cela peut être à l'origine du problème. Jetez un oeil à l'article de Phil Haack sur Sending JSON to an ASP.NET MVC Action Method Argument si c'est quelque chose que vous êtes désireux de faire.