繁体   English   中英

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

[英]Access to http status code from Ext.data.Store

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

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

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

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

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

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

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

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

使用extjs 5.1

商店/代理可以通过监听'beginprocessresponse'或'endprocessresponse'事件来访问每个响应http代码和标头。

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之间发挥作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM