2011-04-13 70 views
0

如果用户登录,那么ajax请求正常工作。当会话失效时,ajax返回登录屏幕,用户可以将登录屏幕视为ajax内容。是否有可能在Ext Js中添加自定义代码,这将在每个Ajax请求中运行,以检查会话是否仍然有效,如果会话无效,则JavaScript将重定向到登录页面,否则它将继续正常执行Ajax请求。是否可以在每个Ajax请求中执行自定义代码而无需手动将该代码添加到Ext Js中的每个ajax代码?

回答

2

Ext.ajax是一个单例,因此您可以为所有请求错误定义全局处理程序。

如果用户未被授权,则您的服务器端代码将需要返回HTTP 403或类似信息。将这个地方(仅一次)在你的代码代码:

Ext.Ajax.on('requestexception', function(conn, response, options) { 
    if (response.status == 403) { 
     Ext.MessageBox.alert('Authentication', 'You are not logged in.'); 
     /* you can display a login box or something here */ 
    } 
}; 

如果一个AJAX请求失败,因为会话已过期,你可以在你的代码优雅地处理它。

options参数包含AJAX请求选项,因此如果向用户显示登录框并对其进行重新认证,则可以重新提交他们自动创建的原始AJAX请求。这个过程对于所有其他现有代码都是无缝的,这些代码会发出AJAX请求。

1

检查会话是否仍然有效应在服务器中完成。不在JavaScript中。

我们不相信客户。

+0

这是在服务器端完成的,但Ext Js就像JavaScript操作系统,所以它会更容易检查会话是否在每个Ajax请求中自动生效,而不是为每个Ajax请求编写相同的代码。 – newbie 2011-04-13 11:27:24

+0

@newbie为什么要检查客户端?只需将一些中间件添加到服务器上的ajax处理程序,以检查会话并在出现错误时返回登录屏幕。 – Raynos 2011-04-13 12:35:56

0

你可以修改你的Ajax过程有两种方式:

1服务器端:在接收到的请求,检查会话 - 如果没有登录或会话过期的用户,返回一个HHTP 403(=未授权)。 2-客户端:作为ajax响应处理程序的一部分,检查错误403.如果返回,请求登录并将其发送到服务器,然后当登录成功时,重新发送原始请求。

这很简单,如果你不使用太多现成的ajax库。如果你是,看看它的功能。