Marcelo Tataje
Marcelo Tataje

Reputation: 3871

setInterval in javascript based on changes made

I'm having an issue with a javascript requirement. I have a html calling a script perpetually every 1500ms using setInterval.

 var t = setInterval(loadData(),1500);

The loadData function calls a script which returns a JSON as a list, what I want to do is to change from a fixed interval to a variable interval. For instance, if there are no changes made between two calls to the script, I must set another value for the interval. I heard I could use jquery linq to compare the length of the list at the beginning and the list when refreshing to change the time value. I also heard I could save the value of count in a cookie to compare always.

Any idea please? I would be grateful. Thanks in advance.

Upvotes: 0

Views: 680

Answers (2)

BiAiB
BiAiB

Reputation: 14122

if the interval is variable, then you can't use setInterval, which period won't be changed after the first call. You can use setTimeout to alter the period:

var period=1500
var timer;
var callback = function() {
    loadData();
    timer = setTimeout( callback, period )
};

var changePeriod = function( newPeriod ) {
    period = newPeriod;
}

//first call
callback();

now, you just need to call changePeriod( ms ) to change the period afterwards

Upvotes: 2

adeneo
adeneo

Reputation: 318182

I'm guessing you're trying to do:

var speed = 1500,
    t = setInterval(loadData, speed);

function loadData() {
    if (something == true) {
        something = false;
        speed = 3000;
        clearInterval(t);
        t = setInterval(loadData, speed);
    }else{
        //do something
    }
}

You should just reference the function, adding the parenthesis runs the function immediately. When using a variable for the speed, you'll need to clear and run the interval function again to change the speed.

Upvotes: 2

Related Questions