Domanda

dojo.xhrPost per inviare richieste Ajax
La chiamata è avvolto da un function sendRequest()

Ora ho di continuo (ogni 3 secondi) inviare lo stesso messaggio ajax al server
Come posso implementare un sondaggio Server con Dojo? Io fondamentalmente bisogno di chiamare sendRequest() ogni 3 secondi

È stato utile?

Soluzione

Non credo che Dojo ha un metodo incorporato per il polling, quindi ecco un metodo generico che è applicabile in tutta quadri

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);
    };
};

Utilizzo:

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

O nel tuo caso:

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

Se si desidera che questo come un pacchetto Dojo, allora quanto segue è un'estensione banale:

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);
    }
});

Utilizzo:

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

Altri suggerimenti

Ho trovato di meglio da fare in questo modo:

  1. Avere una variabile che contiene una matrice vuota (coda)
  2. setInterval da interrogare, su ogni sondaggio, spingere un nuovo oggetto (con i parametri sondaggio) nella matrice (coda); si può anche comprimere sondaggi collassando oggetti con gli stessi parametri in un unico oggetto; si può anche mettere funzioni di gestione in questi oggetti
  3. Avere un timer per ispezionare la coda; se nulla, ritorna
  4. Se c'è un oggetto in attesa in coda, controlla se c'è già un'operazione XHR sospeso che non è tornato, basta aspettare - non si vuole troppi XHR di attesa allo stesso tempo, alcuni dispositivi (ad esempio iPad) strozzatori su it
  5. Se non c'è alcuna operazione XHR in attesa, dequeue il primo oggetto sondaggio e xhrGet che

Il vantaggio di questa procedura è che si può facilmente intervalli sondaggio della valvola a farfalla, funziona bene quando certo periodo di tempo le operazioni XHR fuori, e può facilmente implementare privatizzazione delle richieste di polling.

Per aggiornare continuamente la griglia è possibile includere la richiesta Ajax nel 'aggiornamento-complete' funzione di callback della griglia.

yourGrid.on('dgrid-refresh-complete', function(event) { 

//Ajax request fireing every 3 sec


}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top