我在我的application.js中使用了以下jquery.idletimeout插件:
jQuery.idleTimeout('#session_timeout', '#session_timeout a', {
idleAfter: 600,
pollingInterval: 15,
keepAliveURL: '/session',
serverResponseEquals: 'OK',
// Additional "on" event functions...
});
以下是一些相关的Ruby代码:
# /app/controllers/sessions_controller.rb
class SessionsController < ApplicationController
respond_to :html, :only => [:new, :create, :destroy]
respond_to :js, :only => [:show]
# Used by the jQuery.idleTimeout plugin
def show
if current_user_account # method to check for logged in user
render :text => 'OK'
else
render :text => 'NOT OK', :status => 404
end
end
end
# /config/routes.rb
resource :session
resources :sessions
get 'login' => "sessions#new", :as => "login"
get 'logout' => "sessions#destroy", :as => "logout"
但是,当加载页面时,我的浏览器(Chrome)网络控制台显示以下内容(并且Firefox显示“已中止”状态):
从插件到'/ session'的请求已经完成,但是有些东西搞乱了。该插件将这5个响应视为失败,因此正在中止。为了测试,我创建了以下到同一个控制器/操作的远程链接:
<%= link_to 'test remote session', session_path, :remote => true %>
如果我点击这一切似乎一切正常。 (上面截图中的最后一个请求。)我在我的development.log文件中注意到插件的请求和远程链接的请求之间存在差异:
# Request from plugin:
Started GET "/session" for 127.0.0.1 at 2011-06-16 13:31:33 -0400
Processing by SessionsController#show as
...
Rendered text template (0.0ms)
Completed 200 OK in 898ms (Views: 1.0ms | ActiveRecord: 21.8ms | Sphinx: 0.0ms)
# Request from remote link:
Started GET "/session" for 127.0.0.1 at 2011-06-16 13:33:36 -0400
Processing by SessionsController#show as JS
...
Rendered text template (0.0ms)
Completed 200 OK in 918ms (Views: 1.0ms | ActiveRecord: 2.5ms | Sphinx: 0.0ms)
远程链接请求显示“... #show as JS ”,而插件不包含“JS”。不确定这是否是问题的一部分...
无论如何,这很长,但有谁看到问题是什么?谢谢。
答案 0 :(得分:1)
我遇到了同样的问题。 idleTimeout支持一个AJAXTimeout选项,默认为250ms,但显然它太慢(或默认实际上不起作用)。在任何一种情况下,如果你只是将其增加到500或稍大一些,它就可以正常工作。