2010-10-26 2 views
19

Ajax.BeginForm ruft eine Aktion auf und gibt dann JSON zurück. Wie kann ich auf das JSON-Objekt in meiner OnComplete js-Funktion zugreifen?Ajax.BeginForm, ruft Aktion auf, gibt JSON zurück, wie kann ich auf JSON-Objekt in meiner OnSuccess JS-Funktion zugreifen?

so meine Ajax.BeginForm sieht wie folgt aus ...

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

und meine OnSuccess Funktion sieht wie folgt aus ...

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

ich auch versucht ...

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

Mein Controller "Coupon" gibt diesen ...

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

Irgendwelche Ideen, wie Sie auf den Json zugreifen können, der zurückgegeben wird?

Antwort

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

Dies ist, was die Ajax.BeginForm OnSuccess Rückruf Sie Ihre JSON, um wieder zu tun erwartet.

Hoffe, ich habe jemand anderes einige Zeit auf diesem lächerlich unter dokumentierten "Feature?" Gespeichert.

+0

Es scheint, MVC3 mit unaufdringlichen Ajax verwendet einen anderen Ansatz. Der erste Parameter für OnSuccess ist das Datenobjekt. – pauloya

+8

['CouponSubmitted (Daten, Status, xhr)'] (http://stackoverflow.com/a/7467032/907779) in [Tag: asp.net-mvc3]. –

+0

@Joel - Danke. Ist das irgendwo dokumentiert? ASP.NET MVC scheint schrecklich undokumentiert zu sein. –

0

Dies ist ein Beispiel für den Beitrag selbst, aber das Konzept ist das gleiche. Beachten Sie den Parameter für die onsuccess-Funktion. Der Parameter gibt Ihnen Zugriff auf den Controller. Wenn es Json Daten ist, dann ist das was du bekommst. Wenn der Controller eine Teilansicht zurückgegeben hat, erhalten Sie den HTML-Code für die Ansicht. Sie können die Funktion JQuery $ .ParseJSON() für die zurückgegebenen Daten aufrufen.

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

Leider analysiert, die in diesem Fall nicht funktioniert. – Jason

13

Ich stieß auf diese Frage auf der Suche nach der Antwort, um die gleiche Sache in ASP.NET MVC 4 zu tun, und keiner der oben genannten funktioniert, so dass für alle, die nach der Antwort suchen, die Daten bereits von JSON codiert, wenn Sie erhalten es in Ihrem js Funktion

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); 
    } 
} 

Dies funktioniert nicht mit OnComplete ich es assuame nicht über paramtars Daten erhalten speichert.

+0

Vielen Dank, danke du danke dir. Nahm mich so lange, um herauszufinden, wie man das macht.Ich brauchte nur OnSuccess – Keerigan

+1

Diese letzte Notiz über OnComplete muss größer sein. Das war auch mein Problem. – Joe

2

in asp.net MVC 4

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

wird return 'json'

Verwandte Themen