没有contentType的功能不起作用:' application / json'

时间:2018-02-26 08:39:00

标签: jquery ajax asp.net-ajax

我的问题是ajax中的成功功能有效,但错误不起作用,但如果添加到 contentType:' application / json' 工作总是错误功能

 $.ajax({
                    type: "POST",
                    data: { pollCodeInput: pollCodeInput, pollNameInput: pollNameInput, promotionPoints: promotionPoints },
                    url: "http://Work.local/mvc/KeyFacts/CreatePoll2",                       
                    //contentType: 'application/json',
                    success: function () {
                        openNav();
                        $('#modal').removeClass('modal-open');                         
                    },
                    error: function () {
                        alert("error!");
                    }                             
               });

            });

当我调试时,我的控制器正常工作。这是我的控制器;

[HttpPost]
    public ActionResult CreatePoll2(string pollCodeInput, string pollNameInput, int promotionPoints = 0)
    {
        MethodResult result = BusinessComponentRegistry.SingleInstance.PollManager.Create(pollCodeInput,
            pollNameInput, 0);
        if (result.HasErrors)
        {
            ViewBag.ErrorCreatePoll = result.Messages.ToString();
            return Json(new { success = false, responseText = "The attached file is not supported." }, JsonRequestBehavior.AllowGet);

        }
        else
        {
            ViewBag.SuccessCreatePoll = result.Messages.ToString();             
            return Json(new { success = true, error = false, responseText = "Success!!" }, JsonRequestBehavior.AllowGet);
          }
    }

1 个答案:

答案 0 :(得分:0)

问题是你的ActionResult 返回确定(http 200),因为两个分支都返回有效Json

return Json(new ...

因此ajax来电始终会点击success:回调。

在您的操作中,您将处理PollManager未正确创建并返回成功结果到ajax的情况。

在该结果中有一个标志,表示“成功”是错误的,但这不是用于success:回调的相同的成功 - 没有配置 - 这里的约定。您可以轻松地将该值称为其他内容,例如:

return Json(new { workedlikeacharm = false ...

所以这里最好的(IMO)选项是保持动作不变,将一个有效的结果返回给ajax,并带有一个标记,说明要做什么,并在success:回调中处理它,例如:< / p>

success:function(result) {
    if (result.success == true) {
        openNav();
        $('#modal').removeClass('modal-open');
    } else {
        alert(result.responseText);
    }

但是,如果您想保持ajax成功/失败并更改操作,那么您可以更改要返回的内容:

if (result.HasErrors)
    return new HttpStatusCodeResult(500, "file is not supported");

因为这现在返回500而不是200(200暗示有效return new Json(..),然后javascript代码将点击error:回调。

或者,您可以抛出异常(将生成500状态代码结果),例如:

if (result.HasErrors)
    throw new InvalidOperationException("file is not supported");

在这两种情况下,如果要查看消息,则必须更新error:处理程序以阅读http状态消息。