2010-10-26 6 views
19

Ajax.BeginForm appelle une action, puis renvoie JSON. Comment accéder à l'objet JSON dans ma fonction js OnComplete?Ajax.BeginForm, appelle l'action, renvoie JSON, Comment puis-je accéder à l'objet JSON dans ma fonction JS OnSuccess?

donc mon Ajax.BeginForm ressemble à ceci ...

using (Ajax.BeginForm("Coupon", new AjaxOptions { OnSuccess = "CouponSubmitted" })) 

et ma fonction OnSuccess ressemble à ceci ...

function CouponSubmitted() { 
    var data = response.get_response().get_object(); 
    alert(data.success); 
} 

J'ai aussi essayé ...

function CouponSubmitted(data) { 
    alert(data.success); 
} 

Mon contrôleur "Coupon" renvoie ce ...

return Json(new { success = false, nameError = nameError, emailError = emailError }); 

Des idées sur la façon d'accéder au JSON qui est renvoyé?

Répondre

33
function OnSuccess(e) { //function CouponSubmitted(data) in the question 
    var json = e.get_response().get_object(); 
    alert(json.success); 
} 

C'est ce que le rappel AJAX.BeginForm OnSuccess attend de vous pour obtenir votre retour JSON. J'espère avoir sauvé quelqu'un d'autre sur cette «fonctionnalité» ridiculement sous documentée.

+0

Il semble que MVC3 avec ajax discret utilise une approche différente. Le premier paramètre de OnSuccess est l'objet de données. – pauloya

+8

['CouponSubmitted (données, état, xhr)'] (http://stackoverflow.com/a/7467032/907779) dans [tag: asp.net-mvc3]. –

+0

@Joel - Merci. Est-ce documenté n'importe où? ASP.NET MVC semble horriblement non documenté. –

0

Ceci est un exemple de faire le poste vous-même, mais le concept est le même. Notez le paramètre à la fonction de succès. le paramètre vous donne accès à celui que le contrôleur a renvoyé. Si ce sont des données JSON, c'est ce que vous obtenez. Si le contrôleur a renvoyé une vue partielle, vous obtenez le code HTML pour la vue. Vous pouvez appeler la fonction JQuery $ .ParseJSON() sur les données renvoyées.

$.post('/Assessment/GetAssessmentResults/' + SelectedId, 
function onsuccess(e) { 
    var json_object = $.parseJSON(e); 
}, "POST"); 
+0

Malheureusement, cela ne fonctionne pas dans ce cas. – Jason

13

Je suis tombé sur cette question à la recherche de la réponse à faire la même chose dans ASP.NET MVC 4, et aucun de ce qui précède a fonctionné, donc pour ceux qui cherchent la réponse, les données sont déjà codées à partir de json dans votre fonction js

public ActionResult Something() 
{ 
    return Json(new { result = 0, message = "Testing" }); 
} 

... 

new AjaxOptions { HttpMethod = "POST", OnSuccess= "something" } 

... 

function something(data) { 
    switch(data.result) 
    { 
    case 1: 
     alert(data.result) 
    break; 
    case 0: 
     alert(data.result) 
    break; 
    case -1: 
     alert(data.result) 
    break; 
    default: 
     alert(data.message); 
    } 
} 

Cela ne fonctionne pas avec OnComplete j'assuame il ne dispose pas paramtars recive données.

+0

Merci merci merci. Ça m'a pris tellement de temps pour savoir comment faire ça.J'ai juste besoin de OnSuccess – Keerigan

+1

Cette dernière note sur OnComplete doit être plus grande. C'était mon problème aussi. – Joe

2

en asp.net mvc 4

function CouponSubmitted(data) { 
    alert(data.success); 
} 

sera de retour analysable 'json'

Questions connexes