Search code examples
javascriptajaxdojopolling

Poll the Server with Ajax and Dojo


I'm using dojo.xhrPost to sent Ajax Requests
The call is wrapped by a function sendRequest()

I've now to continuously (every 3sec) send the same ajax Post to the server
How can I implement a Server Poll with Dojo? I basically need to call sendRequest() every 3 secs


Solution

  • I don't believe that Dojo has a method built-in for polling, so here's a generic method that's applicable across frameworks

    var Poll = function(pollFunction, intervalTime) {
        var intervalId = null;
    
        this.start = function(newPollFunction, newIntervalTime) {
            pollFunction = newPollFunction || pollFunction;
            intervalTime = newIntervalTime || intervalTime;
    
            if ( intervalId ) {
                this.stop();
            }
    
            intervalId = setInterval(pollFunction, intervalTime);
        };
    
        this.stop = function() {
            clearInterval(intervalId);
        };
    };
    

    Usage:

    var p = new Poll(function() { console.log("hi!"); }, 1000);
    p.start();
    setTimeout(function() { p.stop();}, 5000);
    

    Or in your case:

    var p = new Poll(sendRequest, 3000);
    p.start();
    

    If you want this as a Dojo package, then the following is a trivial extension:

    dojo.provide("Poll");
    
    dojo.declare("Poll", null, {
        intervalId:   null,
        pollFunction: null,
        intervalTime: null,
    
        constructor: function(newPollFunction, newIntervalTime) {
            this.pollFunction = newPollFunction;
            this.intervalTime = newIntervalTime;
        },
    
        start: function(newPollFunction, newIntervalTime) {
            this.pollFunction = newPollFunction || this.pollFunction;
            this.intervalTime = newIntervalTime || this.intervalTime;
    
            this.stop();
            this.intervalId = setInterval(this.pollFunction, this.intervalTime);
        },
    
        stop: function() {
            clearInterval(this.intervalId);
        }
    });
    

    Usage:

    var p = new Poll(function() {console.log("hi");}, 250);
    p.start();
    setTimeout(dojo.hitch(p, p.stop), 1000);