我正在尝试处理会话超时服务器端。
获取会话超时时,我的服务器使用json发回响应
{success: false}, ContentType: 'application/json', ResponseNo: 408
存储
var storeAssets = Ext.create('Ext.data.Store', {
model : 'modCombo',
autoLoad : false,
proxy : { limitParam : undefined,
startParam : undefined,
paramName : undefined,
pageParam : undefined,
noCache : false,
type : 'ajax',
url : '/caricaAssets.json',
reader : { root : 'data' }
}
});
在客户端,我处理这样的回调加载商店:
storeAssets.load({
scope: this,
callback: function(records, operation, success) {
if (!success) { Ext.Msg.alert('Error'); }
}
});
要执行不同的回复,我想改变提醒。
所以,如果回复没有。是408
,我可以提醒session expired
(依此类推,管理回复号码)。
但我没有找到任何回应的方法。在商店回调!
有什么建议吗?
答案 0 :(得分:4)
不幸的是,回调方法没有作为参数传入服务器响应。这可能是因为有很多方法可以将数据加载到商店中,并且并非所有方法都会有服务器响应。
您可以覆盖代理的processResponse函数,将服务器的响应与操作对象一起存储,然后在回调中访问它。
Ext.define('Ext.data.proxy.ServerOverride', {
override: 'Ext.data.proxy.Server',
processResponse: function (success, operation, request, response, callback, scope) {
operation.serverResponse = response;
this.callParent(arguments);
}
});
然后,获取状态:
storeAssets.load({
scope: this,
callback: function(records, operation, success) {
if (operation.serverResponse.status === 408) {
Ext.Msg.alert('Session expired');
}
}
});
答案 1 :(得分:3)
我知道现在已经很老了,但我遇到了类似的问题。 我发现的解决方案是在代理中监听异常事件。
proxy{
type: 'ajax',
reader: {
type: 'json'
,
listeners: {
exception: function(proxy, response, options){
Ext.MessageBox.alert('Error', response.status + ": " + response.statusText);
}
}
}
我还预测我的商店加载回调仅在成功为真时才进行。 希望其他人搜索会发现这有用。
答案 2 :(得分:1)
试试这个(在extjs 4.2.2上)
callback: function (records, operation, success) {
operation.request.operation.response.status; }
答案 3 :(得分:0)
解决了添加以下代码:
Ext.Ajax.on('requestexception', function(con, resp, op, e){
if (resp.status === 408) {
Ext.Msg.alert('Warning', 'Session expired');
} else {
if (resp.status === 404) {
Ext.Msg.alert('Error', Ext.util.Format.htmlEncode('Server not ready'));
} else {
if (resp.status !== undefined) {
Ext.Msg.alert('Error', Ext.util.Format.htmlEncode('Server not found (') + resp.status + ')');
} else {
Ext.Msg.alert('Error', 'Server not found');
}
}
}
});
当我调用ajax请求时,服务器会返回此异常捕获的信息。现在我可以处理回调代码了!
答案 4 :(得分:0)
我知道这个问题很“旧”,但在ExtJS 4.2.2中,
时callback: function(a,b,c) {}
发生,您可以使用
自动捕获服务器响应b.error.status
if (!c) {
if (b.error.status === 401) {
//logout
}
}
我不知道它是不是在几年前实现的(在我发布这个帖子之后),但它仍然可以帮助任何人在将来查看这篇文章我猜...