首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何用$.ajax调用c# MVC4中的错误函数?

如何用$.ajax调用c# MVC4中的错误函数?
EN

Stack Overflow用户
提问于 2014-12-02 10:02:49
回答 2查看 8K关注 0票数 1

我在MVC4和C#有一个项目。在这个项目中,我的一个控制器有一个方法由Ajax函数调用:

代码语言:javascript
复制
[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;
    }
}

以下Ajax函数使用jQuery调用此方法:

代码语言:javascript
复制
$.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中返回返回的"An error occurred, please try later! " + exc.Message;消息,成功函数也总是被调用。

换句话说,无论我做什么,我都不会运行错误函数。

为了解决这个问题,我查看了正式文档:

  • http://api.jquery.com/jQuery.ajax/

但是,由于我对此很陌生,所以我无法理解任何参数,也无法有效地使用它们。

如何使用Ajax、jQuery和我的控制器创建包含所有可能信息的良好错误消息?

EN

Stack Overflow用户

回答已采纳

发布于 2014-12-02 10:05:23

只有当返回的状态代码不是error时,$.ajax调用的200 OK部分才会触发。在您的示例中,您将返回一个明文响应,因此将是200。您可以这样改变这种行为:

代码语言:javascript
复制
try {
    // do logic here
    return "OK";
}
catch (Exception exc) {
    return new HttpStatusCodeResult(HttpStatusCode.BadRequest, "Bad Request");
}
代码语言:javascript
复制
error: function (jqXHR, textStatus, errorThrown) {
    errorNotification(textStatus);
}

您可以将HttpStatusCode更改为适合您需要的任何内容。

或者,您可以保留200响应并返回带有标志的JSON,以指示请求是否成功:

代码语言:javascript
复制
[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处理程序中标志的状态:

代码语言:javascript
复制
success: function(response) {
    if (response.Success) {
        location.reload(true);
        successNotification("Package edited successfuly!");
    }
    else {
        errorNotification(response.Message); 
    }
},
票数 6
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27246598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档