Sondear el servidor con Ajax y Dojo
-
20-09-2019 - |
Pregunta
Estoy usando dojo.xhrPost a enviarse las solicitudes Ajax
La llamada está envuelto por un function sendRequest()
Ahora he de forma continua (cada 3 segundos) envía el mismo mensaje Ajax al servidor
¿Cómo puedo implementar una encuesta Server con Dojo? Básicamente necesito llamar sendRequest()
cada 3 segundos
Solución
No creo que Dojo tiene un método integrado para el sondeo, así que aquí es un método genérico que es aplicable a través de marcos
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);
};
};
Uso:
var p = new Poll(function() { console.log("hi!"); }, 1000);
p.start();
setTimeout(function() { p.stop();}, 5000);
O, en su caso:
var p = new Poll(sendRequest, 3000);
p.start();
Si desea que esta como un paquete Dojo, a continuación, la siguiente es una extensión trivial:
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);
}
});
Uso:
var p = new Poll(function() {console.log("hi");}, 250);
p.start();
setTimeout(dojo.hitch(p, p.stop), 1000);
Otros consejos
He encontrado que es mejor hacerlo de esta manera:
- tener una variable que contiene una matriz vacía (cola)
- setInterval a Poll, en cada sondeo, empujar un nuevo objeto (con los parámetros de la encuesta) en la matriz (cola); También puede comprimir los sondeos por el colapso de objetos con los mismos parámetros en un unico objeto; incluso se puede poner en funciones de controlador de estos objetos
- Tener un temporizador para inspeccionar la cola; si no, vuelve
- Si hay un objeto a la espera en la cola, comprueba si ya existe una operación xhr pendiente que no ha vuelto, sólo tiene que esperar - usted no quiere demasiados xhr de espera de forma simultánea, algunos dispositivos (por ejemplo, iPad) se ahoga con it
- Si no hay ninguna operación xhr pendiente, quitar de la cola del primer objeto sondeo y que xhrGet
La ventaja de este procedimiento es que se puede intervalos de sondeo fácilmente acelerador, funciona bien cuando cierto tiempo las operaciones XHR, y puede implementar fácilmente privatización de las solicitudes de sondeo.
Para actualizar continuamente su rejilla puede incluir su solicitud Ajax en la función de devolución de llamada 'refresh-completa' de la red.
yourGrid.on('dgrid-refresh-complete', function(event) {
//Ajax request fireing every 3 sec
}