jQuery 的 AJAX.fail()
是一个很好的错误处理程序,可以处理“404 Not Found”等错误,但是我们如何从内部故意调用它.done()
来处理一般错误情况,例如当用户提供的数据不正确时?
问问题
2706 次
2 回答
11
您可以使用在每种情况下都会在错误时调用的通用函数。
$.ajax( 'url' )
.done( function( data, textStatus, jqXHR ) {
if( data == 'Invalid' ) {
ajaxError( jqXHR, "usererror" );
}
})
.fail( ajaxError );
function ajaxError( jqXHR, textStatus, errorThrown ) {
console.log( 'Ajax error: ' + textStatus );
}
于 2013-03-10T08:22:17.960 回答
3
@Juhana 的代码适用于大多数情况。
但是,如果可能出现无法通过data
单独检查来可靠预测的错误,请考虑以下变体:
$.ajax( 'url' ).done( function( data, textStatus, jqXHR ) {
try {
var dataLooksGood = ......;//(boolean) Test data for predictable data errors here
if( !dataLooksGood ) throw( new Error("data invalid"); )
//Handle data here.
//Any naturally-ocurring errors or further manually-thrown errors will be caught below.
}
catch(err) {
ajaxError( jqXHR, "AJAX successful but: " + err.message );
}
}).fail( ajaxError ).always(function() {
//Here do whatever is necessary after success or error
});
function ajaxError( jqXHR, textStatus, errorThrown ) {
console.log( 'AJAX error: ' + textStatus );
}
通过捕获错误,always
即使发生不可预测的错误,处理程序也将被允许触发。因此,无论是否发生错误,您都可以更好地保证“正在加载...”消息或微调器图形被终止。
于 2013-03-10T15:58:52.060 回答