2015-07-03 2 views
1

У меня есть ajax TreeStore с таймаутом 5000 мс, и я хочу поймать событие, когда время выполнения запроса превышает таймаут. Как мне это сделать?ExtJS Поймать событие, когда время выполнения запроса превышает тайм-аут

Мои TreeStore:

Ext.define('Portal.store.ObjectsTreeStore', { 
    extend: 'Ext.data.TreeStore', 
    model: 'Portal.model.ObjectsTreeModel', 
    proxy: { 
     type: 'ajax', 
     url: 'my/url.json', 
     timeout: 5000, // 5 seconds 
     reader: { 
      type: 'json', 
      successProperty: 'success', 
      messageProperty: 'message' 
     } 
    }, 
    listeners: { 
     beforeload: function() { 
      console.log('1');  
     }, 
     load: function() { 
      console.log('2');  
     }, 
     exception: function() { 
      console.log('3');  
     } 
    } 
}); 

С помощью этого кода я только поймать beforeload события, когда время выполнения запроса превышен и запрос отменен. Когда все в порядке, я поймаю beforeload и load.

ответ

0

Просто присоедините свой прослушиватель исключений к прокси-серверу вместо хранилища. См. Пример: https://fiddle.sencha.com/#fiddle/psj

+0

Спасибо, в вашем примере все работает так, как я ожидаю, но я не могу заставить его работать в моем коде. Я пытаюсь проверить мой код более глубоко. –

0

Прокси-сервер Ajax использует Ext.Ajax в фоновом режиме для отправки HTTP-запросов на сервер. Вы можете зарегистрировать requestexception event обработчик на Ext.Ajax одноплодной, что-то вроде этого:

Ext.Ajax.on('requestexception', function() { 
    console.log('HTTP error'); 
}); 

Просто будьте осторожны, так как этот обработчик событий не будет срабатывать независимо от того, кто породил запрос, так что во всей системе (глобальный) и не относящиеся к компоненту который инициировал запрос (Portal.store.ObjectsTreeStore в вашем случае).

Смежные вопросы