Enquete o servidor com Ajax e dojo
-
20-09-2019 - |
Pergunta
estou a usar dojo.xhrpost Para enviar solicitações de Ajax
A chamada é envolvida por um function sendRequest()
Agora, continuamente (a cada 3seg) enviei a mesma postagem de Ajax para o servidor
Como posso implementar uma pesquisa de servidor com dojo? Eu basicamente preciso ligar sendRequest()
A cada 3 segundos
Solução
Não acredito que o Dojo tenha um método embutido para a pesquisa, então aqui está um método genérico aplicável entre as estruturas
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);
Ou no seu caso:
var p = new Poll(sendRequest, 3000);
p.start();
Se você deseja isso como um pacote dojo, a seguir é uma extensão 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);
Outras dicas
Eu achei melhor fazer assim:
- Ter uma variável que contém uma matriz vazia (fila)
- SetInterval para pesquisar, em cada pesquisa, empurre um novo objeto (com os parâmetros da pesquisa) para a matriz (fila); Você também pode compactar pesquisas em colapso de objetos com os mesmos parâmetros em um único objeto; Você pode até colocar as funções do manipulador nesses objetos
- Tenha um cronômetro para inspecionar a fila; Se nada, retorna
- Se houver um objeto pendente na fila, verifique se já existe uma operação de XHR pendente que não retornou, apenas espere - você não quer muitos XHR pendentes simultaneamente, alguns dispositivos (por exemplo, iPad)
- Se não houver operação xhr pendente, dequeue o primeiro objeto de pesquisa e Xhrget
O benefício deste procedimento é que você pode acelerar facilmente intervalos de pesquisa, funciona bem quando certos tempo de operações do XHR e pode facilmente implementar a privatização das solicitações de pesquisa.
Para atualizar continuamente sua grade, você pode incluir sua solicitação AJAX na função de retorno de chamada 'Atualize-complete' da grade.
yourGrid.on('dgrid-refresh-complete', function(event) {
//Ajax request fireing every 3 sec
}