繁体   English   中英

在“beforeunload”上使用jQuery调用rails控制器方法

[英]Calling a rails controller method with jQuery on “beforeunload”

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

这就是我所拥有的。 不确定我是否正确处理参数并且从不调用我的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

注意:将link_to直接放到/leave可以正常工作并用return true;替换jQuery $.get return true; 当用户试图离开时抛出一个对话框。

很接近。 假设您的参数类似于:

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

我使用不引人注目的JS解决了这个问题。 在我的一个Coffeescript文件中,我把:

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

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

谢谢你的帮助,马克。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM