我尝试使用jQuery的$. ajax捕获特定的响应错误。
当出现500或404错误代码时,它不会运行状态代码函数,而是运行错误函数,我会得到一个警报框,而不是应该发生的情况
下面是我的代码
// get page data
getPageData: function(url, callback) {
url = ajaxLoader.getURL(url);
$.ajax({
url: url,
type: 'get',
data: {_ajax_loader: 1},
error: function(xhr, status) {
alert('There was a problem loading that page. You may need to refresh.');
},
statusCode: {
404: function(response) {
ajaxLoader.fetchPage('/missing');
},
500: function(response) {
ajaxLoader.fetchPage('/error');
}
}
}).done(callback);
},
4条答案
按热度按时间von4xj4u1#
这是设计好的。
error
在服务器返回错误时执行。此外,statusCode
中定义的函数也是called。这同样适用于complete
和success
处理程序。您可以修改错误处理程序,使其在
statusCode
中已定义错误代码时不运行。Demo
3zwtqj6y2#
问题是除了statusCode对象之外,您还使用了错误回调函数,错误回调函数在任何类型的错误发生时都会被触发,包括HTTP错误404或500。
要解决此问题,需要删 debugging 误回调,并且只使用statusCode对象。
下面是正确的代码:
//获取页面数据getPageData:函数(url、回调){
},
这样,当返回404或500状态代码时,只会调用适当的函数,而不会调用错误回调。
g9icjywg3#
AJAX 有
success
和error
两个函数,所以可以使用为这两个函数定义的jqXHR
来处理它。成功时:
出错时:
此处为所有status codes
kuarbcqp4#
它将执行
error
和相应的StatusCode
函数。您的代码的唯一问题是,在StatusCode函数中,您有
response
的参数(我假设它是success函数的参数),而它应该与error函数的参数匹配,如下所示:这样,如果接收到404或500,则
error
函数和404/500
函数都将执行。如果您只希望执行404/500
函数,并且error
函数仅在返回的状态不是404或500时执行,则可以执行以下操作: