Pablo Pablo - 1 year ago 115
Javascript Question

Javascript setInterval and `this` solution

I need to access

from my

prefs: null,
startup : function()
// init prefs
this.intervalID = setInterval(this.retrieve_rate, this.INTERVAL);

retrieve_rate : function()
var ajax = null;
ajax = new XMLHttpRequest();'GET', '', true);
ajax.onload = function()
// access prefs here

How can I access this.prefs in

Answer Source

The setInterval line should look like this:-

 this.intervalID = setInterval(
     (function(self) {         //Self-executing func which takes 'this' as self
         return function() {   //Return a function in the context of 'self'
             self.retrieve_rate(); //Thing you wanted to run as non-window 'this'
     this.INTERVAL     //normal interval, 'this' scope not impacted here.

Edit: The same principle applies to the " onload ". In this case its common for the "outer" code to do little, it just sets up the request an then sends it. In this case the extra overhead an additinal function as in the above code is unnecessary. Your retrieve_rate should look more like this:-

retrieve_rate : function()
    var self = this;
    var ajax = new XMLHttpRequest();'GET', '', true);
    ajax.onreadystatechanged= function()
        if (ajax.readyState == 4 && ajax.status == 200)
            // prefs available as self.prefs
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download