2010-10-26 13 views
19

Ajax.BeginForm llama a una acción y luego devuelve JSON. ¿Cómo accedo al objeto JSON en mi función OnComplete js?Ajax.BeginForm, acción de llamadas, devuelve JSON, ¿cómo puedo acceder al objeto JSON en mi función OnSuccess JS?

así que mi Ajax.BeginForm se parece a esto ...

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

y mi función OnSuccess se parece a esto ...

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

También probé ...

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

Mi controlador "Cupón" devuelve esto ...

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

¿Alguna idea sobre cómo acceder al Json que se devuelve?

Respuesta

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

Esto es lo que la devolución de llamada Ajax.BeginForm onSuccess espera que hagas para obtener su JSON.

Espero haber salvado a alguien más en esta ridículamente documentada "función?".

+0

Parece que MVC3 con ajax no intrusivo usa un enfoque diferente. El primer parámetro para OnSuccess es el objeto de datos. – pauloya

+8

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

+0

@Joel - Gracias. ¿Está esto documentado en algún lugar? ASP.NET MVC parece horriblemente indocumentado. –

0

este es un ejemplo de hacer la publicación usted mismo, pero el concepto es el mismo. Observe el parámetro para la función onsuccess. el parámetro te da acceso a cualquier cosa que devuelva el controlador. Si se trata de datos Json, entonces eso es lo que obtienes. Si el controlador devolvió una vista parcial, obtendrá el html para la vista. Puede llamar a la función JQuery $ .ParseJSON() en los datos devueltos.

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

desgracia que no funciona en este caso. – Jason

13

Me topé con esta pregunta buscando la respuesta para hacer lo mismo en ASP.NET MVC 4, y ninguna de las anteriores funcionó, así que para cualquiera que busque la respuesta, los datos ya están codificados de json cuando recibe en su función 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); 
    } 
} 

Esto no quiere trabajar con OnComplete I assuame que no tiene paramtars a recive datos.

+0

Gracias, gracias, gracias tu gracias Me tomó tanto tiempo descubrir cómo hacer esto.Solo necesitaba ese OnSuccess – Keerigan

+1

. Esa última nota sobre OnComplete necesita ser más grande. Este fue mi problema también. – Joe

2

en asp.net mvc 4

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

volverá analizado 'json'

Cuestiones relacionadas