我有一些 jQuery 可以调用 WCF 服务。当服务遇到错误时,它会抛出一个WebFaultException
带有描述和500 Internal Server Error
状态代码的。
客户端,我正在做一些事情:
$.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
.
我的问题是:我怎样才能处理呼叫的WebExceptionFault
内部$.ajax(...)
?就目前$.ajax
而言,它完全忽略了传递给它的任何状态代码。
我尝试使用ajaxError
and 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"