簡體   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