Frage

Ich bin mit dojo.xhrPost Ajax Requests gesendet
Der Anruf wird durch eine function sendRequest() gewickelte

Ich habe jetzt kontinuierlich (alle 3 Sekunden) den gleichen Ajax-Beitrag an den Server senden
Wie kann ich einen Server Poll mit Dojo implementieren? Ich im Grunde brauchen sendRequest() alle 3 Sekunden aufrufen

War es hilfreich?

Lösung

Ich glaube nicht, dass Dojo eine Methode hat eingebaut für Polling, also hier ist eine generische Methode, die über Rahmenbedingungen anwendbar ist

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

Verbrauch:

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

oder in Ihrem Fall:

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

Wenn Sie dies als ein Dojo-Paket wollen, dann ist die folgende triviale Erweiterung:

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

Verbrauch:

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

Andere Tipps

Ich habe es besser gefunden, wie dies zu tun:

  1. haben eine Variable, die ein leeres Array enthält (queue)
  2. setInterval Poll, bei jeder Abfrage, drückt ein neues Objekt (mit den Parametern poll) in den Array (queue); Sie können auch komprimieren Umfragen von Objekten mit den gleichen Parametern in einem einzigen Objekt kollabiert; Sie können sogar Handler-Funktionen in diese Objekte setzen
  3. Haben Sie einen Timer, um die Warteschlange zu prüfen; Wenn nichts, kehrt
  4. Wenn es ein anhängiges Objekt in der Warteschlange befindet, überprüft, ob es bereits eine anhängige xhr Operation, die nicht zurückgekehrt ist, warten Sie - Sie wollen nicht zu viele xhr die gleichzeitig anhängige, einige Geräte (zB iPad) Drosseln auf es
  5. Wenn es keine anhängigen xhr Betrieb dequeue der ersten Umfrage Objekt und xhrGet es

Der Vorteil dieses Verfahrens ist, dass man leicht Drossel Umfrage Intervalle kann, funktioniert gut, wenn bestimmte xhr Operationen Auszeit und leicht Privatisierung von Abfrageanforderungen umsetzen kann.

Um kontinuierlich aktualisieren Sie Ihre Gitter können Sie Ihre Ajax-Request in der ‚Refresh-complete‘ Callback-Funktion des Gitters sind.

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

//Ajax request fireing every 3 sec


}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top