2010-06-29 4 views
1

J'ai rencontré ce problème tout d'un coup faire un ajax simple d'un formulaire. Le JSON revient correctement formaté mais le navigateur vous invite à le télécharger. Fiddler montre le type de contenu comme correct:Invite de navigateur téléchargement de la réponse JSON, ASP.NET MVC2

application/json; charset: utf-8 

Voici mon javascript:

$("#submitbutton").click(function(e) { 
$.post('FormTest', function(o) { 
    FormCallback(o); 
    }); 
}); 

Voici le côté serveur:

public JsonResult FormTest(string test) { 
     return Json("This worked!"); 
    } 

Encore une fois, je reviens d'un objet à partir du serveur bien, mais il me demande de télécharger (Firefox) ou montre simplement l'objet dans un nouvel onglet dans le navigateur (Chrome).

J'ai trouvé une autre question comme celle-ci mais l'auteur n'a pas expliqué ce qui n'allait pas. C'est fou! Des idées?

Edit: Le code est ci-dessous, à côté de la e.preventDefault, j'ai aussi besoin de dire que ce qui forme des données à utiliser:

$("#submit-button").click(function(e) { 
    $.post('address', $("#form").serialize(), function(o) { 
     FormCallback(o); 
    }); 
    e.preventDefault(); 
}); 

Répondre

2

Vous voulez annuler l'action par défaut, je pense:

$("#submitbutton").click(function(e) { 
$.post('FormTest', function(o) { 
    FormCallback(o); 
    }); 
    return false; // <<===== 
}); 

Vous pouvez aussi essayer:

e.preventDefault(); 

si cela ne fonctionne pas par lui-même

+0

Cela n'a pas fonctionné. Même résultat – KieselguhrKid

+0

Attends j'ai menti, ça a marché, le problème était double, je le posterai dans ma question d'origine. Merci! – KieselguhrKid

+0

Aussi, j'ai remarqué que quand je le fais en ligne cela fonctionne très bien, mais si je mets le code dans un script externe ça ne marche pas (même invite JSON à télécharger) ... des idées? – KieselguhrKid

1

En plus de @ la réponse de Marc Je voudrais ajouter que:

return Json("This worked!"); 

en fait ne fonctionne pas car il ne retourne pas un objet JSON valide. Il renvoie simplement "This worked!" au client. Vous devez construire l'objet:

return Json(new { Message = "This worked!" }); 
+0

Essayé cela et il n'a rien fait – KieselguhrKid

+0

Comme je l'ai dit, il était un ajout à la poste @ Marc, ce qui signifie que, après avoir appliqué sa suggestion, vous pouvez générer un JSON valide comme indiqué dans mon message. –

1

MVC 2 renvoie le type MIME JSON par défaut. Si vous souhaitez recevoir des données JSON en HTML brut, vous devez transmettre vos données JSON comme suit:

return Json(model, "text/html", JsonRequestBehavior.AllowGet); 

Un autre point, vous pouvez marquer votre action avec [ChildActionOnly] et appelez votre action dans votre vue de cette façon

var json = <%= Html.Action("YourActionMethod", "YourControllerName") %> 
+0

Cela ne fonctionnait pas non plus (merci pour l'astuce ChildActionOnly) – KieselguhrKid

+0

Avez-vous la route par défaut {controller}/{action}/{id} dans votre Global.asax? –

Questions connexes