jQuery - 设置Ajax处理程序优先级

jAn*_*ndy 8 javascript ajax jquery

实际上问题就像话题所说的那样简单.有没有办法给不同的ajax处理程序一个更高/更低的优先级(这意味着它们会更早地开火)?

我的意思是什么?好吧,我必须处理一个相当庞大的网络应用程序.大量的Ajax请求在不同的模块中被触发.现在,我的目标是实现一个简单的会话超时机制.每个请求都将当前session-id作为参数发送,如果session-id不再有效,我的后端脚本将返回带有自定义响应标头集的请求(值为uri).

所以我基本上就是这样

window.jQuery && jQuery( document ).ajaxComplete(function( event, xhr, settings ) {
    var redirectto = xhr.getResponseHeader( 'new_ajax_location' );
    if( redirectto ) {
        location.href = redirectto;
    }
});
Run Code Online (Sandbox Code Playgroud)

当然,这确实像魅力一样,但我的问题是这个全局的ajax事件实际上需要在100%的时间内首先被解雇,但事实并非如此.其中一些原始的ajax-requests处理程序会因为丢失或意外的数据而抛出错误,在这种情况下,全局处理程序永远不会被执行.

现在,如果我不需要遍历每个请求处理程序并使其无效的会话数据响应,我会很高兴.我更喜欢在某个特定的地方做这份工作.但是如何确保我的全局处理程序首先执行?

Yac*_*ali 1

如果我理解正确的话,你想在任何地方添加你自己的回调到 json 请求。您可以使用 ajaxPrefilter 挂钩。

    $.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
        options.complete = function (jqXHR2, settings) {
            var redirectto = jqXHR2.getResponseHeader( 'new_ajax_location' );
            if( redirectto ) {
                location.href = redirectto;
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

您还可以更改此处的选项,将会话 ID 添加到请求参数中。