ajax调用中的错误处理

时间:2010-03-11 08:06:44

标签: jquery asp.net-mvc ajax error-handling

我有一个网站,其中ajax调用将从Asp.Net-Mvc操作中获取一些Json数据。

现在我正在尝试植入错误处理。

但我仍然坚持如何做到这一点。

我找到的最简单的方法是捕获控制器操作中的异常,并返回一个带有错误消息的Json对象。然后在ajax succes函数中,如果它的excist,我可以输出错误消息。

但我不确定这是最好的方法,所以我尝试使用ajax调用的错误功能。

我的代码是这样的:

$.ajax(
    {
       type: "POST",
       url: "/home/geterror",
       data: "",
       dataType: "json",
       success: function(result)
       {
           //do something

       },
       error: function(XMLHttpRequest, textStatus, errorThrown)
       {
            alert(XMLHttpRequest.responseText + " "+ XMLHttpRequest.status +" "+ textStatus +" "+ errorThrown);   
       }
    });

我看到XMLHttpRequest.responseText是一个标准的asp.net错误页面,标题中包含我的errormessage。 errorThrown总是未定义的。 现在我试图从XMLHttpRequest.responseText中获取标题。但我不知道该怎么做。 (我试过的一切都失败了......) 因此,如果有人有任何消化,或更好的方法来处理Ajax调用错误......

谢谢, 布鲁诺

3 个答案:

答案 0 :(得分:3)

error回调中处理错误处理要好得多。要让jQuery将其检测为错误,您需要将HTTP response code设置为某个4xx或5xx。我不知道ASP.NET所以请耐心等待,但是你需要这样的效果。

Response.code = '401'
Response.text = JSON({ message: 'An error occurred.', ... })

在客户端,parse the JSON response

$.ajax({
    ...
    error: function(request, status, error) {
        var result = JSON.parse(request.responseText);
        alert(result.message);
    });
});

答案 1 :(得分:3)

布鲁诺,我想你应该在这里做出区分;你有想要向用户显示的自定义或预期错误,例如提供的无效值,你必须告诉用户“先生,你不能这样做,因为bla bla”,另一方面你有其他意外错误,如例如,代码中的一个错误会导致一些不必要的异常,例如在插入中违反FK。我的建议是全局处理后者,你可以设置查询ajax请求以产生一些共同的行为,例如ajaxSetup。以这种方式,您设置了一个常见的错误处理程序(状态500)。如果您遇到“预期”错误(我的示例中的第一个案例),您应该返回一个特殊对象,因为Darin在他的回答中显示并在成功回调中处理它,毕竟,这是一个有效的场景,你应该处理就这样。

答案 2 :(得分:2)

public ActionResult Index()
{
    try
    {
        // Do something
        return Json(new { status = true, errorMessage = "" });
    }
    catch (SomeSpecialExceptionYouWantToHandle e)
    {
        return Json(new { status = false, errorMessage = e.Message });
    }
}

和ajax电话:

$.post('/home/index', { }, function(result) {
    if (result.status) {
        alert('success');
    } else {
        alert(result.errorMessage);
    }
}, 'json');