Доступ к http-коду статуса из Ext.data.Store - PullRequest
5 голосов
/ 21 сентября 2011

У меня есть http API, который (поразительно новая техника) реагирует на разные ошибки, устанавливая разные статусы ответов.

Вопрос в том, как лучше всего обрабатывать эти состояния при использовании Ext.data.Store с некоторым прокси-сервером XMLHttpRequest изнутри. Насколько я понимаю, событие «load» не передает статус напрямую, как и «исключение», а последнее фактически даже не срабатывает при получении статуса 4 **.

Итак, как я вижу из кода, экземпляр xhr скрыт из Ext.data.store, поэтому вопрос также может быть сформулирован как «Как лучше использовать extjs для обработки низкоуровневого объекта xhr».

Ответы [ 3 ]

8 голосов
/ 22 сентября 2011

В Ext.data.Store нет события исключение .Вместо этого именно Ext.data.proxy.Server и его подклассы (например, Ext.data.proxy.Ajax) определяют исключительное событие .Слушатели получают объект ответа, который включает статус http.

В зависимости от ваших настроек, вы можете зарегистрировать прослушиватель на прокси магазина или - если ваш магазин использует модель - на прокси модели.

Эта тестовая установка работала для меня на Chrome 14 и FF 6:

var store = Ext.create('Ext.data.Store', {
    fields: [ 'field1', 'field2'],

    proxy: {
        type: 'ajax',
        url: 'api/data.json',
        reader: {
            type: 'json',
            root: 'data'
        },
        listeners: {
            exception: function(proxy, exception, operation) {
                console.log(response.status);
            }

        }
    },
});
store.load(); 
2 голосов
/ 21 сентября 2011

Событие исключения предоставляет объект response, который имеет свойство status, содержащее код состояния HTML, который вы хотите видеть.

Если ваше исключение действительно не вызвано 4 ** ошибками (которыепо моему опыту, вы можете попробовать зарегистрировать слушатель ajax:

Ext.Ajax.on('requestexception', exceptionHandlerMethod);

и

function exceptionHandlerMethod(connection, response, requestOptions, listenerOptions) {
    if(response.status == 401) {
        alert('401 error');
    }
}
0 голосов
/ 10 марта 2015

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

Хранилище / прокси-сервер может получить доступ к каждому http-коду и заголовку ответа, прослушивая события 'beginprocessresponse' или 'endprocessresponse'.

proxy: {
    // snip

    listeners: {
        beginprocessresponse: 'onResponse'
    }

    onResponse: function(store, response, operation) {
         console.log('prior to reader');
         console.log(response.getAllResponseHeaders());
    }
}

Мне любопытно, как EventDomainиграет в миксе между Ext.Ajax, Proxy, Reader и Store.

...