我在 MVC4 中有一个 C# 项目。在这个项目中,我的一个 Controller 有一个由 Ajax 函数调用的方法:
[HttpPost]
public string EditPackage(int id, string newPkgName)
{
try{
//do logic here
return "OK";
}catch(Exception exc){
return "An error occurred, please try later! " + exc.Message;
}
}
此方法由以下使用 jQuery 的 Ajax 函数调用:
$.ajax({
url: $(this).data('url'),
type: 'POST',
contentType: 'application/json; charset=utf-8',
traditional: true,
data: JSON.stringify({ id: id, newPkgName: newPkgName}),
success: function () {
location.reload(true);
successNotification("Package edited successfuly!");
},
error: function (message) {
errorNotification(message);
}
});
这段代码的问题在于,即使服务器在 catch 中返回 return "An error occurred, please try later!"+ exc.Message;
消息,成功函数是一个总是打电话。
换句话说,无论我做什么,我都不会运行错误函数。
为了解决这个问题,我查看了官方文档:
但是,由于我是新手,所以我不了解任何参数,也不知道如何有效地使用它们。
如何使用 Ajax、jQuery 和我的 Controller 创建包含所有可能信息的良好错误消息?
最佳答案
$.ajax
调用的 error
部分只有在返回的状态代码不是 200 OK
时才会触发。在您的情况下,您返回的是明文响应,因此将是 200
。您可以像这样更改此行为:
try {
// do logic here
return "OK";
}
catch (Exception exc) {
return new HttpStatusCodeResult(HttpStatusCode.BadRequest, "Bad Request");
}
error: function (jqXHR, textStatus, errorThrown) {
errorNotification(textStatus);
}
您可以将 HttpStatusCode
更改为适合您需要的任何值。
或者,您可以保留 200
响应并返回带有标志的 JSON 以指示请求是否成功:
[HttpPost]
public ActionResult EditPackage(int id, string newPkgName)
{
try {
//do logic here
return Json(new { Success = true, Message = "OK"});
}
catch (Exception exc) {
return Json(new { Success = false, Message = "An error occurred, please try later! " + exc.Message });
}
}
然后您可以删除error
处理程序,并检查success
处理程序中标志的状态:
success: function(response) {
if (response.Success) {
location.reload(true);
successNotification("Package edited successfuly!");
}
else {
errorNotification(response.Message);
}
},
关于javascript - 如何使用 C# MVC4 调用 $.ajax 中的错误函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27246598/