Ajax.BeginForm, Вызывает действие, Возвращает JSON, Как мне получить доступ к объекту JSON в моей функции JS OnSuccess?

Ajax.BeginForm вызывает действие, а затем возвращает JSON. Как получить доступ к объекту JSON в моей функции OnComplete js?

поэтому мой Ajax.BeginForm выглядит так...

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

и моя функция OnSuccess выглядит так:

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

Я тоже пробовал...

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

Мой контроллер "Купон" возвращает это...

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

Любые идеи о том, как получить доступ к Json, который возвращается?

Ответ 1

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

Это то, что ожидает от вас обратный вызов AJAX.BeginForm OnSuccess, чтобы вернуть ваш JSON.

Надеюсь, что я некоторое время спасал кого-то на этом смехотворно по документированной "функции?".

Ответ 2

Я столкнулся с этим вопросом, ища ответ, чтобы сделать то же самое в ASP.NET MVC 4, и ни одно из вышеописанных не было выполнено, поэтому для любого, кто ищет ответ, данные уже закодированы из json, когда вы его извлекаете в вашей функции 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);
    }
}

Это не работает с OnComplete. Я уверен, у него нет параметров для получения данных.

Ответ 3

в asp.net mvc 4

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

вернет обработанный 'json'

Ответ 4

Это пример выполнения поста, но концепция одинаков. Обратите внимание на параметр для функции onsuccess. параметр дает вам доступ к любому возвращаемому контроллеру. Если это данные Json, то это то, что вы получаете. Если контроллер вернул частичный вид, вы получите html для представления. Вы можете вызвать функцию JQuery $.ParseJSON() для возвращаемых данных.

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