如何设置 $.ajaxStart() 和 $.ajaxStop() 仅在 POST 请求时触发?

6
我想为ajax请求设置全局处理程序,但仅限于POST情况。
不幸的是,全局处理程序$.ajaxStart()和$.ajaxStop()将对所有请求触发,据我所见,没有参数传递到处理程序函数中。文档也很少,因为大多数jQuery文档都是如此。
我能否在全局ajax处理程序内检测请求类型?

我不这么认为。尽管ajaxStop在每个ajax调用完成时都会被调用,但如果有多个请求,那么请求类型应该是什么? - luk2302
2个回答

5
我猜你可以这样做:
jQuery.ajaxPrefilter(function( options) {
    if(options.type !== 'POST') {
        options.global = false;
    }
});

请查看: jQuery 预处理器

5

你必须使用以下事件替代:ajaxSend() ajaxComplete()

$(document).ajaxSend(function (event, xhr, options) {
    if (options.type.toUpperCase() === "POST") console.log('POST request');;
}).ajaxComplete(function (event, xhr, options) {
    if (options.type.toUpperCase() === "POST") console.log('POST request');
});

使用ajaxSend,您仍可以使用xhr.abort()中止请求。 编辑: 更好的方法是使用jQuery.ajaxPrefilter,如@DemoUser的答案所示。

我理解得对吗,$.ajaxStart() 只会在整个队列中触发一次,因此它本身没有类型,而 $.ajaxSend() 则会为每个请求触发一次,因此它可以访问请求类型?谢谢! - George

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接