Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
脱机SetInterval jquery时的时间增加_Jquery - Fatal编程技术网

脱机SetInterval jquery时的时间增加

脱机SetInterval jquery时的时间增加,jquery,Jquery,我有一个场景,当用户在线时,每隔3或4秒向服务器发送一个请求,但当用户离线时,问题开始于该场景我想增加jquery的setinterval方法的时间我已经为其编写了代码,但尚未成功:- 我的代码是这样的 var interval= function(){ if(hasInternets()){ var inter= 15000; return inter; } else { var

我有一个场景,当用户在线时,每隔3或4秒向服务器发送一个请求,但当用户离线时,问题开始于该场景我想增加jquery的setinterval方法的时间我已经为其编写了代码,但尚未成功:-

我的代码是这样的

var interval= function(){
      if(hasInternets()){
          var inter= 15000;
          return inter;
      }
      else
          {
          var inter= 15000;
          inter+= 15000;
          return inter;
          }
  };
  setInterval( function(){
        if (hasInternets()) {
// here I am doing something
            }   
}, interval());
hasInternet方法检查internet连接


所以,如果你们能帮助我,请提前感谢。

因为JavaScript中的函数是对象,所以可以将
inter
as字段指定给该对象,该对象将在函数调用之间存储:

var interval = function(inter) {
        if (!interval.inter) {
            interval.inter = 15000;
        }
        if (hasInternets()) {
            return interval.inter;
        } else {
            interval.inter += 15000;
            return interval.inter;
        }
    };
setInterval(function() {
    if (hasInternets()) {
        // here I am doing something
    }
}, interval());
setInterval()
只调用一次,初始传递的间隔作为第二个参数。它不会在每次执行后重新评估间隔

要解决此问题,您可以使用
setTimeout()
,根据条件使用不同的间隔

var interval= function() {
    return hasInternets() ? 15000 : 30000;
};
function doStuff() {
    if (hasInternets()) {
        // ...
    }

    // recalculate interval and continue
    setTimeout(doStuff, interval());
}
setTimeoue(doStuff, interval()); // start it off

该功能的主要目的是什么?它的作用是什么?这就是我们所说的指数退避,它的用途是当您脱机时,当您脱机时,您希望增加向服务器发送ajax请求的时间,这样就不会受到客户端不必要的影响。感谢techfoobar提供的解决方案,但我也有一个解决方案,需要你对我的解决方案的意见。var计数器=1000;var myFunction=function(){clearInterval(interval);if(hasInternet()){counter+=2000;console.log(“指数测试”)console.log(counter)}interval=setInterval(myFunction,counter);}var interval=setInterval(myFunction,counter)@铁路工人-是的,这也应该有效。但是,由于每次都要取消并重新启动
setInterval()
,因此
setTimeout()
也可以。