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

Foi útil?

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:

  1. Ter uma variável que contém uma matriz vazia (fila)
  2. 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
  3. Tenha um cronômetro para inspecionar a fila; Se nada, retorna
  4. 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)
  5. 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


}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top