javascript - 根据加载文件的内容阻止分配的成功处理程序

标签 javascript jquery ajax handler

如果某些陈述为真,例如,我正在尝试找到一种方法来阻止正常的成功处理程序,例如

$.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);
}

有没有办法阻止根据加载文件的内容分配成功处理程序?

最佳答案

我找到了jQuery.ajaxPrefilter

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/

相关文章:

javascript - PHP CodeIgniter - cookie 过期但页面仍然存在,该怎么办?

javascript - 使用 Javascript 或 Django 进行模板化?

javascript - 我可以使用 jquery/js 将类添加到悬停的不同元素吗

php - 动态换肤

javascript - 未捕获的 DOMException : Failed to execute 'pushState' on 'History' :

javascript - DOJO 以什么顺序处理 ajax 请求?

javascript等待多个异步ajax响应不起作用

javascript - 通过 Chrome 的开发工具编辑资源时,有没有办法监视 keyup 事件?

Javascript 减法返回 NaN

javascript - 使用 jQuery.extend 合并现有元素