jQuery.active函数


102

我试图找到有关以下jQuery函数的更多信息:

jQuery.active

它描述了测试到服务器的活动连接数,当连接数为零时将评估为true。

我在jQuery网站上找不到有关此功能的任何信息,并且想知道是否有人知道我可以在哪里找到。

Answers:


163

这是jQuery内部使用的变量,但没有理由隐藏,因此可以使用。请注意,它将成为jquery.ajax.active下一个版本。没有文档,因为它是公开的,但未在官方API中公开,实际上很多事情都是这样的jQuery.cachejQuery.data())。

我在这里是根据库中的实际用法猜测的,它似乎专门用于支持$.ajaxStart()$.ajaxStop()(我将进一步说明),但是它们仅关心请求开始或停止时它是否为0。但是,由于没有理由将其隐藏,因此您可以看到当前正在进行的并发 AJAX请求的实际数量。


当jQuery启动AJAX请求时,会发生以下情况

if ( s.global && ! jQuery.active++ ) {
  jQuery.event.trigger( "ajaxStart" );
}

这就是导致$.ajaxStart()事件触发的原因,连接数刚刚从0变为1(jQuery.active++此连接之后不是0,并且!0 == true),这意味着当前并发请求中的第一个开始。另一端发生相同的事情。当AJAX请求停止(因为一个beforeSend通过中止return falseAJAX调用complete函数的运行):

if ( s.global && ! --jQuery.active ) {
  jQuery.event.trigger( "ajaxStop" );
}

这就是导致$.ajaxStop()事件触发的原因,请求数降至0,这意味着最后一个同时进行的 AJAX调用已完成。在全球其他AJAX处理火在那里沿途为好。


2
我在《给忍者的jQuery新手》(2010年)一书中看到它的描述
jmav 2011年

@Nick:按照您对.ajaxStop的解释,将在每个ajax调用完成后执行。但是,如果所有的ajax调用都完成了,它将被调用。如果我错了,可以请你纠正我。
Kishore Relangi

27
现在称为$.active,顺便说一句。
瑞安·比格

4
@RyanBigg不仅$是的别名jQuery,所以两者都还正确吗?
arxpoetica

2
@ArxPoetica仅在不使用的jQuery情况下运行noConflict
瑞安·比格

19

对于任何试图将jQuery.active与JSONP请求一起使用的人(就像我以前一样),您需要使用以下命令启用它:

jQuery.ajaxPrefilter(function( options ) {
    options.global = true;
});

请记住,您需要在JSONP请求上设置超时以捕获失败。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.