javascript - 如何使用 C# MVC4 调用 $.ajax 中的错误函数?

标签 javascript c# jquery ajax asp.net-mvc-4

我在 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/

相关文章:

javascript - OpenWeatherMap API HTTPS 拒绝 javascript

javascript - 如何在 `onClick` 事件中调用 Redux Saga 操作?

javascript - 使用 watchify 打包后出现 blob 错误

javascript - 在函数表达式(或函数声明)中添加方法

javascript - Jquery UI 位置 : wrong top offset

c# - WPF:将文本框放在堆栈面板中的单选按钮旁边

c# - 使用 MSWord 互操作的拼写检查窗口在我的 Vista 应用程序后面打开

c# - 与实例化 Web 引用代理类相关的开销是多少?

javascript - highchart 和 .clone() 的问题

javascript - 无法使用 .data(el ,'dataname' ).sublev 获取数据对象