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

Posted

技术标签:

【中文标题】Ajax.BeginForm,调用操作,返回 JSON,如何在 OnSuccess JS 函数中访问 JSON 对象?【英文标题】:Ajax.BeginForm, Calls Action, Returns JSON, How do I access JSON object in my OnSuccess JS Function? 【发布时间】:2011-04-30 13:26:43 【问题描述】:

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 的任何想法?

【问题讨论】:

【参考方案1】:
function OnSuccess(e)  //function CouponSubmitted(data) in the question
   var json = e.get_response().get_object();
   alert(json.success);

这就是 AJAX.BeginForm OnSuccess 回调希望您执行的操作以获取 JSON。

希望我在这个可笑的记录“功能”下为其他人节省了一些时间?

【讨论】:

似乎带有不显眼的 ajax 的 MVC3 使用了不同的方法。 OnSuccess 的第一个参数是数据对象。 CouponSubmitted(data, status, xhr) in asp.net-mvc3。 @Joel - 谢谢。这在任何地方都有记录吗? ASP.NET MVC 似乎非常无证。 @Ek0nomik:通过快速 google 搜索 (2011-09) 找不到关于 javascript 回调的任何文档,但请参阅我对 two out of three callback signatures 的链接答案。发现他们在阅读~/Scripts/jquery.unobtrusive-ajax.js,这给了你真正的独家新闻:) 使用MVC v4.0.30319,不用get_response()就可以使用get_objet()获取【参考方案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 我假设它没有参数来接收数据。

【讨论】:

谢谢谢谢谢谢谢谢。我花了很长时间才知道如何做到这一点。我只需要那个 OnSuccess 关于 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");  

【讨论】:

以上是关于Ajax.BeginForm,调用操作,返回 JSON,如何在 OnSuccess JS 函数中访问 JSON 对象?的主要内容,如果未能解决你的问题,请参考以下文章

form表单和ajax表单提交(Html.BeginForm()Ajax.BeginForm())的差别

通过 ActionLink 提交 Ajax.BeginForm

在 MVC3 中的 Ajax.Beginform 中调用自定义确认对话框

Ajax.BeginForm()实现ajax无刷新提交

jQuery.Ajax与Ajax.beginform一起使用不引人注目的JavaScript

MVC 5 Ajax.BeginForm Submit按钮调用当前页面而不是指定的Controller和Action的URL