如果某些陈述为真,例如,我正在尝试找到一种方法来阻止正常的成功处理程序,例如
$.ajax({
url: ...
success: function( response ) {
if ( response.success ) {
// do success
} else {
// do fail, maybe login timeout
}
}
});
这是最简单的方法。非常简单,只需拥有一个 success = true/false
的对象。
但是,如果语句为真,有没有办法防止我的成功处理程序被解雇,例如
$.ajax({
url: ...
success: function( response ) {
// do success
}
});
$.ajaxFireBeforeAllOtherSuccessHandler(function(response) {
return response.success;
});
然后这个有 $.ajaxFireBeforeAllOtherSuccessHandler
(假名)在所有其他成功处理程序之前触发并确定其他处理程序是否会触发。
我知道我可以通过401
设置请求的statusCode
,然后使用$.ajaxSetup
进行主控制:
$.ajaxSetup({
statusCode: {
401: function() {
// this do fail
}
}
});
但目前对我来说不可能!
另一个方法是使用一个检查方法,将回调包装在其中:
$.ajax({
url: ...
success: function() { checkAjax(arguments, function() {
// do success
}); }
});
function checkAjax( a, c ) {
return a[0].success && c.apply($, a);
}
有没有办法阻止根据加载文件的内容分配成功处理程序?
最佳答案
Witch 允许您在触发原始成功处理程序之前捕获所有 ajax 调用。然后您可以覆盖处理程序并进行测试以查看是否要触发原始处理程序:
jQuery.ajaxPrefilter(function( opts ) {
var _success = opts.success; // Copy original
opts.success = function( r ) { // Overwrite original
var args = [].slice.call(arguments), // Convert arguments to a native array
isTrue = !(r.success === false); // Do my testing here
if ( isTrue ) {
_success.apply( this, args ); // Fire original with the right context and arguments
} else {
// Do my alert thing in here
}
};
});
感谢您的帮助@jfriend00
关于javascript - 根据加载文件的内容阻止分配的成功处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9889231/