Иногда в приложениях требуется обращение к серверу по определенному интервалу времени. Стандартными средствами JavaScript’a это делается примерно так:
setInterval(function() { RPC.util.Format(function() { ... }); }, 5000);
Но в ExtJS есть более корректный подход, использовать Ext.direct.PollingProvider. Если кратко, то Ext.direct.PollingProvider — это провайдер, который сам запрашивает данные с сервера с помощью direct-функции по таймеру.
PN.RPC.POLLING_API = { type: 'itpolling', pollFn: 'RPC.util.Format, id: 'datePoller', interval: 2000, listeners: { data: function (provider, e, eOpts) { // e.response - здесь хранится результат выполнения var poll = Ext.direct.Manager.getProvider('datePoller'); poll.disconnect(); // если хотим завершить запросы } } }; setInterval() // register the polling API to the PollingProvider. Ext.Direct.addProvider(PN.RPC.POLLING_API);
Данный способ отлично подходит если, например, нужно запрашивать какую-либо direct — функцию. В руководстве ExtJS type указан как polling, но здесь используется наши itpolling В нем переопределены некоторые методы для работы с нашим itdirect
!!!Внимание. Помните о том что большое количество запросов к серверу могут «положит» пул IIS
Код провайдера
Ext.define('It.direct.PollingProvider', { extend: 'Ext.direct.PollingProvider', alias: 'direct.itpollingprovider', requires: [ 'Ext.Ajax', 'Ext.util.TaskRunner', 'Ext.direct.ExceptionEvent' ], type: 'itpolling', /* * переопределен */ onData: function (opt, success, response) { var me = this, i, len, events; if (success) { //events = me.createEvents(response); //for (i = 0, len = events.length; i < len; ++i) { me.fireEvent('data', me, response); //} } else { events = new (Ext).direct.ExceptionEvent({ data: null, code: Ext.direct.Manager.exceptions.TRANSPORT, message: 'Unable to connect to the server.', xhr: response }); me.fireEvent('data', me, events); } }, /* * переопределен */ onPollFn: function (result, event, success, options) { this.onData(null, success, { response: result }); } })