从Ext.data.Store访问http状态代码

时间:2011-09-21 08:38:15

标签: javascript ajax extjs xmlhttprequest extjs4

我有一个http API(令人震惊的新技术)对设置不同响应状态的不同错误做出反应。

问题是 - 在使用Ext.data.Store和一些XMLHttpRequest-inside代理时,处理这种状态的最佳方法是什么?据我所知,“load”事件不会直接传递状态,也不会传递“异常”,最后一个事件实际上甚至不会在收到4 **状态时触发。

所以,正如我从代码中看到的那样,实例是从Ext.data.store中隐藏的,所以问题也可以说是“什么是最好的extjs实践来处理低级别的xhr对象”。

3 个答案:

答案 0 :(得分:8)

Ext.data.Store上没有异常事件。相反,它是Ext.data.proxy.Server及其定义exception event的子类(如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(); 

答案 1 :(得分:2)

异常事件确实提供了一个response对象,该对象具有status属性,其中包含您要查看的HTML状态代码。

如果您的异常确实没有被4 **错误触发(根据我的经验,这可以解雇),您可以尝试注册ajax监听器:

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

function exceptionHandlerMethod(connection, response, requestOptions, listenerOptions) {
    if(response.status == 401) {
        alert('401 error');
    }
}

答案 2 :(得分:0)

使用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之间进行混合。