当用户离开页面时,我想在控制器中调用一个方法。理想情况下,我还想传递几个参数。
这就是我所拥有的。不确定我是否正确处理参数,我的离开方法永远不会被调用。
<script language="javascript">
$(window).bind('beforeunload', function() {
$.get('/leave?foo='+<%= @bar %>, null, null, null)
});
</script>
match '/leave' to: 'posts#leave'
def leave
puts params[:bar]
end
注意:将link_to
直接放到/leave
下工作正常,当用户试图离开时,用$.get
替换jQuery return true;
会抛出一个对话框。
答案 0 :(得分:2)
非常接近。假设您的参数类似于:
foo=bar
你的jQuery get变成:
$.get('/leave?foo=bar', null, null, null)
你的路由没有抛出语法错误(抱歉,Rails改变了每个主要版本的路由,所以也许这适用于Rails 2.x但它不在3.x上)。而不是:
match '/leave' to: 'posts#leave'
使用...
match '/leave' => 'posts#leave'
在您的控制器中:
def leave
puts params[:foo]
end
或者,如果您只想测试参数是否存在:
def leave
puts params.include?(:foo)
end
答案 1 :(得分:0)
我使用不引人注目的JS解决了这个问题。在我的一个Coffeescript文件中:
jQuery ->
$(window).on('beforeunload', ->
$.get('/leave?foo=bar', null)
return "Bye!")
我想在没有警报的情况下这样做,但除非我返回一些内容,否则GET不起作用。很奇怪,但这是一个单独的问题。
感谢您的帮助,Mark。