Skip to main content
 首页 » 编程设计

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

2024年01月24日34exmyth

我在 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);  
    } 
},