【发布时间】:2012-07-03 16:26:50
【问题描述】:
我有一些调用 WCF 服务的 jQuery。当服务遇到错误时,它会抛出带有描述和500 Internal Server Error 状态码的WebFaultException。
客户端,我正在做一些事情:
$.ajax({
url: BaseUrl + 'ThisShouldThrowAnException',
type: 'GET',
dataType: 'jsonp',
crossDomain: true,
success: function (data) {
// this should never be called
alert("Got data: " + data);
},
error: function (jqXHR, status, message) { // never called
// would like this to handle my status code
alert(status + " " + message);
}
});
在本地 IIS 服务器上,被调用的相应代码如下:
[OperationContract]
[WebGet(RequestFormat=WebMessageFormat.Json)]
bool ThisShouldThrowAnException();
public bool ThisShouldThrowAnException()
{
throw new WebFaultException<String>("Something really bad happened.", HttpStatusCode.InternalServerError);
}
问题是当我进行这个调用时,成功的函数被调用了。 jQuery 似乎吞下了我的500 Internal Server Error,而是给了我一个200 OK。使用Fiddler 进行检查还显示我的响应状态代码是200 OK。当我通过浏览器拨打电话或手动提出请求时,我会收到相应的500 Internal Server Error。
我的问题是:如何在 $.ajax(...) 调用中处理 WebExceptionFault?就目前而言,$.ajax 完全忽略了传递给它的任何状态代码。
我尝试使用ajaxError 和statusCode,但都没有成功:
$('#error').ajaxError(function() {
alert("An error occurred");
});
$.ajax({
url: BaseUrl + 'ThisShouldThrowAnException',
type: 'GET',
dataType: 'jsonp',
crossDomain: true,
success: function (data) {
alert("Got data: " + data);
},
statusCode: {
500: function() {
alert("Got 500 Internal Server Error");
}
},
error: function (jqXHR, status, message) {
alert(status + " " + message);
}
});
新发现
进一步分析,当我检查 jQuery 生成的查询字符串时,我发现以下返回一个 200 OK:
http://localhost/RestService/RestService.svc/ThisShouldThrowAnException?callback=jQuery172003801283869839445_1341495740773&_=1341495740777
// on page:
jQuery172003801283869839445_1341495740773("Something really bad happened.",500);
同时,以下请求返回500 Internal Server Error:
http://localhost/RestService/RestService.svc/ThisShouldThrowAnException
// on page:
"Something really bad happened"
【问题讨论】:
-
你有没有在你的错误函数中试过这个>>var msg = JSON.parse(jqXHR.responseText); alert(msg.Message);
-
这不会改变任何事情。错误处理程序从一开始就不会被调用。
-
抱歉误读了您的问题。我用这个 ajaxError 检查我的 url 是否有这样的问题: .ajaxError(function (e, xhr, settings, exception) { if (settings.url == "Default.aspx/GetDat") { alert('Url cannot被称为'); } });
-
有一个属性叫
ajaxError?我在文档中没有看到。
标签: c# jquery wcf exception-handling http-status-codes