我正在尝试使用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);
},
答案 0 :(得分:5)
这是设计的。服务器返回错误时执行error
。此外,statusCode
中定义的函数也是called。这同样适用于complete
和success
处理程序。
您可以修改错误处理程序,以便在statusCode
中定义错误代码时不运行。
$.ajax({
url: '/echo',
type: 'get',
success: function() {
console.log('ajax.success');
},
error: function(xhr, status) {
// check if xhr.status is defined in $.ajax.statusCode
// if true, return false to stop this function
if (typeof this.statusCode[xhr.status] != 'undefined') {
return false;
}
// else continue
console.log('ajax.error');
},
statusCode: {
404: function(response) {
console.log('ajax.statusCode: 404');
},
500: function(response) {
console.log('ajax.statusCode: 500');
}
}
});
答案 1 :(得分:-2)
它将执行arm64
和适当的error
函数。
你的代码唯一的问题是在你的StatusCode函数中,你有StatusCode
的参数(我假设是成功函数的参数),它应该与错误函数参数匹配,如下所示:
response
这样,如果收到404或500,则// 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(xhr, status) {
ajaxLoader.fetchPage('/missing');
},
500: function(xhr, status) {
ajaxLoader.fetchPage('/error');
}
}
}).done(callback);
},
函数和error
函数都将执行。如果您希望仅执行404/500
函数,并且404/500
函数仅在返回的状态不是404或500时执行,则可以按如下方式执行:
error
答案 2 :(得分:-2)
$ .ajax有success
和error
个函数,因此您可以使用jqXHR
为两者定义处理它。
成功:
success: function(data, status, jqXHR) {
switch(jqXHR.status){
case 200:
//status ok
break;
case 206:
//Partial Content
//awesome code for handle it
break;
}
}
出错:
error: function(jqXHR, status, errorThrown) {
switch(jqXHR.status){
case 400:
//Bad Request
//awesome code for handle it
break;
case 404:
//Not Found
//awesome code for handle it
break;
}
}
此处所有status codes