0

当用户离开页面时,我想在我的控制器中调用一个方法。理想情况下,我还想传入几个参数。

这就是我所拥有的。不确定我是否正确处理了参数并且我的 leave 方法永远不会被调用。

在“show.html.erb”中

<script language="javascript"> 
    $(window).bind('beforeunload', function() {
    $.get('/leave?foo='+<%= @bar %>, null, null, null)
    });
</script>

在'routes.rb'

match '/leave' to: 'posts#leave'

在“posts_controller.rb”中

def leave
  puts params[:bar]
end

注意:将 alink_to直接放入可以正常工作,并在用户尝试离开时将/leavejQuery 替换为$.get抛出一个对话框。return true;

4

2 回答 2

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
于 2012-04-28T05:08:46.903 回答
0

我使用不显眼的 JS 解决了这个问题。在我的一个 Coffeescript 文件中,我放了:

jQuery ->
  $(window).on('beforeunload', ->
    $.get('/leave?foo=bar', null)
    return "Bye!")

我想在没有警报的情况下执行此操作,但除非我返回某些内容,否则 GET 不起作用。很奇怪,但这是一个单独的问题。

谢谢你的帮助,马克。

于 2012-05-03T11:13:10.163 回答