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

¿Fue útil?

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:

  1. tener una variable que contiene una matriz vacía (cola)
  2. 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
  3. Tener un temporizador para inspeccionar la cola; si no, vuelve
  4. 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
  5. 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


}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top