Вопрос

я использую dojo.xhrPost для отправки Ajax-запросов
Вызов обернут function sendRequest()

Теперь мне нужно постоянно (каждые 3 секунды) отправлять на сервер одно и то же сообщение ajax.
Как я могу реализовать опрос сервера с помощью Dojo?Мне в принципе нужно позвонить sendRequest() каждые 3 секунды

Это было полезно?

Решение

Я не верю, что в Dojo есть встроенный метод опроса, поэтому вот общий метод, применимый во всех средах.

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

Использование:

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

Или в вашем случае:

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

Если вам нужен пакет Dojo, то следующее тривиальное расширение:

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

Использование:

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

Другие советы

Я нашел, что лучше сделать так:

  1. Иметь переменную, содержащую пустой массив (очередь)
  2. setInterval для опроса, при каждом опросе помещать новый объект (с параметрами опроса) в массив (очередь);вы также можете сжимать опросы, сжимая объекты с одинаковыми параметрами в один объект;вы даже можете поместить в эти объекты функции-обработчики
  3. Иметь таймер для проверки очереди;если ничего, возвращает
  4. Если в очереди есть ожидающий объект, проверяется, существует ли уже ожидающая операция xhr, которая не вернулась, просто подождите - вы не хотите, чтобы одновременно ожидало слишком много xhr, некоторые устройства (например,iPad) задыхается от этого
  5. Если ожидающей операции xhr нет, исключите из очереди первый объект опроса и выполните xhrGet его.

Преимущество этой процедуры заключается в том, что вы можете легко регулировать интервалы опроса, отлично работает, когда истекает время определенных операций xhr, и можете легко реализовать приватизацию запросов опроса.

Чтобы постоянно обновлять сетку, вы можете включить свой ajax-запрос в функцию обратного вызова «обновление-завершение» сетки.

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

//Ajax request fireing every 3 sec


}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top