Asp.net mvc 从ASP.NET MVC操作返回什么以允许jQuery ajax成功事件触发?

Asp.net mvc 从ASP.NET MVC操作返回什么以允许jQuery ajax成功事件触发?,asp.net-mvc,jquery,Asp.net Mvc,Jquery,现在,我的ajax帖子都会触发错误事件,即使操作没有导致错误。我有一个ASP.NET MVC操作,看起来像: [AcceptVerbs(HttpVerbs.Post)] public virtual ActionResult StuffToDo(int id) { // do various things that work ... return new JsonResult(); // i have to return something, so this... } 在客

现在,我的ajax帖子都会触发错误事件,即使操作没有导致错误。我有一个ASP.NET MVC操作,看起来像:

[AcceptVerbs(HttpVerbs.Post)]
public virtual ActionResult StuffToDo(int id)
{
     // do various things that work ...
     return new JsonResult(); // i have to return something, so this...
}
在客户端,我有一个jQuery:

$('#actionClick').click(function() {
     if (confirm('Are you sure?')) {
         $.ajax({
             type: "POST",
             url: "/Customer/StuffToDo/<%= Model.Customer.Id %>",
             contentType: "application/json; charset=utf-8",
             data: "{}",
             dataType: "json",
             success: function() {
                 ShowSuccessResult("Yay!");
             },
             error: function(xhr, ajaxOptions, thrownError) {
                 ShowErrorResult("Boo! Message:" + xhr.responseText);
             }
         });
      }
      return false;
 });
$('#actionClick')。单击(函数(){
如果(确认('你确定吗?')){
$.ajax({
类型:“POST”,
url:“/Customer/StuffToDo/”,
contentType:“应用程序/json;字符集=utf-8”,
数据:“{}”,
数据类型:“json”,
成功:函数(){
ShowSuccessResult(“耶!”);
},
错误:函数(xhr、ajaxOptions、thrownError){
结果(“Boo!消息:+xhr.responseText”);
}
});
}
返回false;
});
如果操作成功(没有抛出异常),那么我希望触发成功事件处理程序。相反,错误事件正在触发。在行动中是否有我应该传回或更改的内容,以便启动成功事件

我意识到这个问题与基本相同,但我的错误处理程序已经有了解决其他人问题的扩展签名

我将返回值更改为Null,以查看这是否影响了任何内容,但没有行为更改


看起来这是HTTPS的一个问题。我从请求中得到多个响应。前两条是401条消息,然后我得到了200条。

我认为问题在于您没有在JsonResult中返回任何内容。尝试:

return this.Json(string.Empty);
看看这是否有效。我认为问题在于,您没有向jQuery调用返回任何内容,而是返回一个空的JSON集:

{}

返回空结果也可能有用

return new EmptyResult();

注意:您的返回类型不必是ActionResult或event,也不必是继承自它的任何内容。事实上,mvc允许您调用任何公共方法。但是,您应该像使用任何其他方法(如JsonResult)一样,始终使用您想要的最显式的返回类型

方法上的返回类型应该是JsonResult,而不是ActionResult。

2对于在这里登陆的试图触发ajax jQuery
成功
从MVC控制器回调的任何人的简要说明:

  • 如果在Ajax中使用
    键入:“GET”
    ,则需要包含
    JsonRequestBehavior.AllowGet
    以绕过默认的反
  • 如上所述,如果您在Ajax请求中指示了
    数据类型:“json”
    ,如果您正在进行一个单向调用(例如
    Save
    ),而不需要任何返回,那么您可以从控制器返回任何可序列化为
    json
    的内容。但如果是200,必须归还一些东西。如果没有返回数据,请使用204
  • 错误-触发Ajax
    error
    处理程序

    工作-触发Ajax成功处理程序:


    你能从控制台发布firebug请求响应的屏幕截图吗?xhr.responseText是什么?firebug说我得到了一个200。@Drew-responseText是一个空字符串。ajaxOptions在监视列表中显示为“parseerror”。JsonResult不接受任何参数。我将返回值更改为null,但这并不影响结果。@Sailing Judo-我删除了该值并修复了代码示例。控制器公开一个Json()方法,该方法接受一个对象并返回一个JsonResult对象。这就是问题所在!我从没想过一百万年后会发生这种事。很好的解决方法。JsonResult是ActionResult。这是我的问题。我在做一个GET,但忘记了AllowGet,因此返回实际上抛出了一个异常,因此我的javascript将其视为失败处理。
     return Json(true, JsonRequestBehavior.AllowGet);
    
     // Nope - Status 200 must have some content
     return new HttpStatusCodeResult(HttpStatusCode.OK);
    
     // Also returns a 200 with no data - not allowed
     return new EmptyResult();
    
     // Return a 204 if there's no data
     return new HttpStatusCodeResult(HttpStatusCode.NoContent);
    
     // Return something with a 200 return
     return Json(new {Success = true});