我有一个http API(令人震惊的新技术)对设置不同响应状态的不同错误做出反应。
问题是 - 在使用Ext.data.Store和一些XMLHttpRequest-inside代理时,处理这种状态的最佳方法是什么?据我所知,“load”事件不会直接传递状态,也不会传递“异常”,最后一个事件实际上甚至不会在收到4 **状态时触发。
所以,正如我从代码中看到的那样,实例是从Ext.data.store中隐藏的,所以问题也可以说是“什么是最好的extjs实践来处理低级别的xhr对象”。
答案 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之间进行混合。