Poll den Server mit Ajax und Dojo
-
20-09-2019 - |
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
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:
- haben eine Variable, die ein leeres Array enthält (queue)
- 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
- Haben Sie einen Timer, um die Warteschlange zu prüfen; Wenn nichts, kehrt
- 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
- 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
}