Interroga il server con l'Ajax e Dojo
-
20-09-2019 - |
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
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:
- Avere una variabile che contiene una matrice vuota (coda)
- 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
- Avere un timer per ispezionare la coda; se nulla, ritorna
- 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
- 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
}