我试图找到一种方法来阻止我的正常成功处理程序,如果某些陈述是真的,例如
$.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
(伪名称)在所有其他成功处理程序之前触发,并确定其他成功处理程序是否会触发。
我知道我可以通过statusCode
设置请求的401
,然后使用$.ajaxSetup
设置主控制:
$.ajaxSetup({
statusCode: {
401: function() {
// this do fail
}
}
});
但目前我不可能做到这一点!
另一种方法是使用check方法将回调包装在:
中$.ajax({
url: ...
success: function() { checkAjax(arguments, function() {
// do success
}); }
});
function checkAjax( a, c ) {
return a[0].success && c.apply($, a);
}
根据加载文件的内容,有没有办法阻止分配的成功处理程序?
答案 0 :(得分:3)
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
答案 1 :(得分:2)
如果您正在寻找一种全局方式来决定是否调用普通成功处理程序,那么我认为您可以这样做:
设置全局ajaxSuccess处理程序as described here。然后,在名为mySuccess: fn
之类的ajax设置对象上创建自己的属性,并将成功处理程序放在那里而不是普通的success: fn
,这样jQuery就不会自动为它调用它。然后,在ajaxSuccess处理程序中,您可以询问xhr对象并决定是否要继续调用您的success函数。如果这样做,那么您可以查看设置对象以获取mySuccess
处理程序并调用它。
在一个不太复杂的方法中,您可以定义一个为普通成功处理程序设置的实用程序函数。在该成功处理程序中,您将检查响应的值以及它是否是您要查找的内容,然后您可以在设置对象上调用mySuccess
函数。