2010-10-26 13 views
19

Ajax.BeginForm wywołuje akcję, a następnie zwraca JSON. Jak uzyskać dostęp do obiektu JSON w mojej funkcji OnComplete?Ajax.BeginForm, wywoływanie akcji, zwraca JSON, Jak uzyskać dostęp do obiektu JSON w mojej funkcji JS OnSuccess?

więc moja Ajax.BeginForm wygląda następująco ...

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

i mój OnSuccess funkcja wygląda tak ...

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

Próbowałem również ...

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

Mój kontroler "Kupon" zwraca ten ...

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

Wszelkie pomysły na dostęp do Json, który zostanie zwrócony?

Odpowiedz

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

To właśnie zwrotna Ajax.BeginForm onSuccess spodziewa się zrobić, aby dostać się z powrotem JSON.

Mam nadzieję, że zaoszczędziłem kiedyś kogoś na tym absurdalnie niedokumentowanym "filmie"?

+0

Wygląda na to, że MVC3 z dyskretnym ajaxem stosuje inne podejście. Pierwszym parametrem dla OnSuccess jest obiekt danych. – pauloya

+8

["CouponSubmitted (data, status, xhr)'] (http://stackoverflow.com/a/7467032/907779) w [tag: asp.net-mvc3]. –

+0

@Joel - Dzięki. Czy to jest udokumentowane w dowolnym miejscu? ASP.NET MVC wydaje się okropnie nieudokumentowane. –

0

Oto przykład samodzielnego wykonania postu, ale koncepcja jest taka sama. Zwróć uwagę na parametr funkcji onsuccess. parametr daje dostęp do tego, do którego kontroler został zwrócony. Jeśli to dane Json, to właśnie to otrzymujesz. Jeśli kontroler zwrócił częściowy widok, otrzymasz kod HTML dla widoku. Możesz wywołać funkcję JQuery $ .ParseJSON() na zwróconych danych.

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

niestety to nie działa w tym przypadku. – Jason

13

Wpadłem na to pytanie szukając odpowiedzi, aby zrobić to samo w ASP.NET MVC 4, i żadna z powyższych nie zadziałała, więc dla każdego, kto szuka odpowiedzi, dane są już zakodowane z json, gdy otrzymujesz to w funkcji 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); 
    } 
} 

to nie działa z onComplete I assuame go nie ma paramtars aby otrzymywać dane.

+0

Dziękuję dziękuję dziękuję dziękuję. Zajęło mi to tyle czasu, aby dowiedzieć się, jak to zrobić.Potrzebowałem tylko OnSuccess – Keerigan

+1

Ta ostatnia uwaga na temat OnComplete musi być większa. To był także mój problem. – Joe

2

w ASP.NET MVC 4

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

wróci przetwarzany 'json'

Powiązane problemy