任何想法如何在执行时检索服务器端抛出的原始异常 ajax使用jQuery调用并使用
web.config中的customErrors mode =“On”
。
如果mode =“Off”,我可以使用此功能获取错误:
error: function(xhr, status, error) {
var error = JSON.parse(xhr.responseText);
alert(error.Message);
}
答案 0 :(得分:1)
最好的办法是将服务器方法移动到具有自己的web.config
的其他主机中。如果您以前从未这样做过,ASP.NET Web Services是一个很好的起点。
如果这不可行,您可以将整个服务器方法包装在try ... catch
中并修改方法,以使其成功返回值包含异常信息。这有一些缺点:您必须修改$.ajax
success
处理程序以手动检查错误,并且您只捕获服务器方法中发生的异常(但您会错过http超时,DNS解析错误等。)。
答案 1 :(得分:1)
我遇到了同样的问题,发现了一些不同的解决方案:
您可以在web.config中禁用特定位置的客户端错误。
<location path="ajaxReuests">
<system.web>
<customErrors mode="Off" />
</system.web>
</location>
但是,请在禁用自定义错误时注意客户错误security vunerability。
另一个(更安全的解决方案)是在错误页面上使用ajax-complete-callback-handler和meta标签来检测错误并将响应转发给“正常”错误函数。为此,您需要在自定义错误页面上包含错误状态代码,例如:
<head runat="server">
<title>Oops</title>
<link href="/css/default.css" rel="stylesheet" type="text/css" />
<meta name="statuscode" content="500" />
...
然后,您可以从XmlHttpRequest.responsText中解析出状态代码,并在检测到错误的状态代码时调用正常的错误函数。
$.ajax({
url: '/ajax/mydata.ashx',
dataType: 'json',
complete: function(XMLHttpRequest, textStatus) {
var statuscodeRegex = /content="(.*?)"/;
if (statuscodeRegex.test(XMLHttpRequest.responseText) &&
statuscodeRegex.exec(XMLHttpRequest.responseText)[0] != 200)
this.error(XMLHttpRequest, textStatus, "Oh no... an error!");
},
success: function(myData) {
//Do something useful...
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
//Error...
}
});