我的问题是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);
}
}
答案 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状态消息。