Question

J'utilise dojo.xhrPost à envoyer Ajax demandes
L'appel est enveloppé par un function sendRequest()

Je l'ai maintenant en permanence (tous les 3s) envoyer le même message ajax au serveur
Comment puis-je mettre en œuvre un sondage du serveur avec Dojo? J'ai besoin essentiellement d'appeler sendRequest() tous les 3 secondes

Était-ce utile?

La solution

Je ne crois pas que Dojo a une méthode intégrée pour le vote, voici donc une méthode générique qui est applicable dans les cadres

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

Utilisation:

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

Ou dans votre cas:

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

Si vous souhaitez utiliser ce package un Dojo, alors ce qui suit est une extension triviale:

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

Utilisation:

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

Autres conseils

Je l'ai trouvé de mieux à faire comme ceci:

  1. avoir une variable qui contient un tableau vide (file d'attente)
  2. setInterval de scrutin, chaque vote, pousser un nouvel objet (avec les paramètres de sondage) dans la matrice (file d'attente); vous pouvez également compresser les sondages par des objets effondrement avec les mêmes paramètres dans un seul objet; vous pouvez même mettre les fonctions de gestionnaire dans ces objets
  3. Avoir une minuterie pour inspecter la file d'attente; si rien, retourne
  4. Si un objet en attente dans la file d'attente, vérifie s'il y a déjà une opération de XHR en attente qui n'a pas retourné, attendez - vous ne voulez pas de trop XHR en attente simultanément, certains périphériques (par exemple, iPad) selfs sur il
  5. S'il n'y a pas d'opération de XHR en attente, dequeue le premier objet de sondage et xhrGet it

L'avantage de cette procédure est que vous pouvez facilement des intervalles d'interrogation des gaz, fonctionne très bien lorsque certains temps des opérations XHR sur, et peut facilement mettre en œuvre la privatisation des demandes de vote.

Pour mettre à jour en permanence votre réseau, vous pouvez inclure votre demande ajax dans la fonction de rappel « rafraîchissement complet » de la grille.

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

//Ajax request fireing every 3 sec


}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top