Ajax.BeginForm,调用Action并返回JSON,如何在OnSuccess JS函数中访问JSON对象?

20

Ajax.BeginForm会调用一个动作并返回JSON。如何在我的OnComplete js函数中访问JSON对象?

因此,我的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的想法?
4个回答

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

AJAX.BeginForm的OnSuccess回调期望您执行以下操作以获取JSON返回值。

希望我为其他人节省了一些时间,因为这个“功能”实在是文档太少了。


似乎MVC3与不显眼的ajax使用了不同的方法。OnSuccess的第一个参数是数据对象。 - pauloya
8
在 [tag:asp.net-mvc3] 中,CouponSubmitted(data, status, xhr) 表示提交了优惠券的信息,其中 datastatusxhr 分别表示数据、状态和 XMLHttpRequest。请注意,我的翻译会使原文更通俗易懂,但不会改变其原意。 - Joel Purra
@Joel - 谢谢。这个有文档吗?ASP.NET MVC 看起来文档很少啊。 - Justin Helgerson
@Ek0nomik:在2011年的快速谷歌搜索中找不到任何有关JavaScript回调函数的文档,但请参阅我的链接答案,其中包含三个回调签名中的两个。通过阅读~/Scripts/jquery.unobtrusive-ajax.js文件,我找到了它们,这将为您提供真正的信息 :) - Joel Purra
使用MVC v4.0.30319,您可以使用get_objet()而不使用get_response()来获取它。 - Samih A

14

我在寻找ASP.NET MVC 4中实现相同功能的答案时遇到了这个问题,但以上所有方法都无效,因此对于任何正在寻找答案的人来说,在您的js函数中接收json数据时,数据已经被编码过了。

 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时无法运行,我认为它没有接收数据的参数。


谢谢,谢谢,谢谢,谢谢。我花了很长时间才找到如何做到这一点。我只需要那个OnSuccess。 - Keerigan
1
关于OnComplete的最后一条注释需要更大。这也是我的问题。 - Joe

2
在ASP.NET MVC 4中,
function CouponSubmitted(data) {
    alert(data.success); 
}

将返回解析后的“json”。


0

这是一个自己进行POST请求的示例,但概念是相同的。请注意onsuccess函数的参数。该参数使您可以访问控制器返回的任何内容。如果它是Json数据,则您将得到Json数据。如果控制器返回了部分视图,则您将获得视图的HTML。您可以在返回的数据上调用JQuery $.ParseJSON()函数。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接