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

注:link_to直接を配置すると正常に/leave機能し、jQuery$.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ファイルの1つに、次のように記述しました。

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

アラートなしでこれを実行したいのですが、何かを返さない限り、GETは機能しません。奇妙ですが、それは別の質問です。

助けてくれてありがとう、マーク。

于 2012-05-03T11:13:10.163 に答える