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

发布于 2024-12-05 19:40:38 字数 274 浏览 1 评论 0原文

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

问题是 - 在将 Ext.data.Store 与某些 XMLHttpRequest 内部代理一起使用时,处理此状态的最佳方法是什么?据我所知,“加载”事件不会直接传递状态,还有“异常”,最后一个事件实际上在收到 4** 状态时甚至不会触发。

因此,正如我从代码中看到的那样,xhr 实例在 Ext.data.store 中是隐藏的,因此问题也可以表述为“处理低级 xhr 对象的最佳 extjs 实践是什么”。

I have an http API which (shockingly new technique) reacts on different errors setting different response statuses.

The question is - while using Ext.data.Store with some XMLHttpRequest-inside proxy, what is the best way to handle this statuses? As far as I can understand, "load" event does not pass status directly, as well as "exception", and the last one actually doesn't even trigger when 4** status is received.

So, as I can see from code xhr instance is hidden from Ext.data.store, so the question is also can be stated as "What is best extjs practice to handle low-level xhr object".

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

只想待在家 2024-12-12 19:40:38

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

There is no exception event on Ext.data.Store. Instead, it is Ext.data.proxy.Server and its sub-classes (like Ext.data.proxy.Ajax) that define an exception event. Listeners receive a response object which includes the http status.

Depending on your setup, you can register a listener on the store's proxy, or - if your store uses a model - on the model's proxy.

This test setup worked for me on Chrome 14 and 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(); 
淡紫姑娘! 2024-12-12 19:40:38

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

如果您的异常确实不是由 4** 错误引发的(根据我的经验,这确实会引发),您可以尝试注册一个 ajax 侦听器

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

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

The exception event does provide a response object which has a status property containing the HTML status code you want to see.

If your exception is indeed not fired by 4** errors (which in my experience do fire) you could try to register an ajax listener instead:

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

and

function exceptionHandlerMethod(connection, response, requestOptions, listenerOptions) {
    if(response.status == 401) {
        alert('401 error');
    }
}
逆流 2024-12-12 19:40:38

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

Using extjs 5.1

The store/proxy can access every response http code & header by listening to 'beginprocessresponse' or 'endprocessresponse' events.

proxy: {
    // snip

    listeners: {
        beginprocessresponse: 'onResponse'
    }

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

I am curious how EventDomain plays into the mix between Ext.Ajax, Proxy, Reader, and Store.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文