正在为jquery.ajax()生成自定义错误
本文关键字:自定义 错误 jquery ajax | 更新日期: 2023-09-27 17:58:01
让我们假设我的httphandler(.ashx)中有以下方法:
private void Foo()
{
try
{
throw new Exception("blah");
}
catch(Exception e)
{
HttpContext.Current.Response.Write(
serializer.Serialize(new AjaxError(e)));
}
}
[Serializable]
public class AjaxError
{
public string Message { get; set; }
public string InnerException { get; set; }
public string StackTrace { get; set; }
public AjaxError(Exception e)
{
if (e != null)
{
this.Message = e.Message;
this.StackTrace = e.StackTrace;
this.InnerException = e.InnerException != null ?
e.InnerException.Message : null;
HttpContext.Current.Response.StatusDescription = "CustomError";
}
}
}
当我对该方法进行$.ajax()
调用时,我将最终进入success
回调,无论后端是否出现问题,我都将进入catch
块。
我已经对ajax方法进行了一些扩展,以规范错误处理,因此无论是"jquery"错误(解析错误等)还是我的自定义错误,我都会在错误回调中结束。
现在,我想知道的是,我应该添加一些类似的东西吗
HttpContext.Current.Response.StatusCode = 500;
最终进入jQuerys错误处理程序,或者我应该处理
HttpContext.Current.Response.StatusDescription = "CustomError";
在jqXHR对象上,当它在那里时,假设它是一个错误?
如果有什么不清楚的地方,请告诉我。
您至少需要使用状态代码,因为这样您的$.ajax就可以实现这样的失败函数:
$.ajax({...})
.fail(function(xhr) {
console.log(xhr.statusText); // the status text
console.log(xhr.statusCode); // the status code
});
如果你想直接将文本发送给用户,你可以使用statusText吗。如果你愿意,你也可以为不同的错误做不同的状态码(即使状态码不是传统的),比如:
$.ajax({...})
.fail(function(xhr) {
switch(xhr.statusCode) {
case 401:
// ... do something
break;
case 402:
// ... do something
break;
case 403:
// ... do something
break;
}
});