ページをアンロードする前にサーバーに投稿しようとしていますが、これに従いましたが、正常に動作しています。私の問題は、window.unload の $.postがアンロード後にトリガーされることです。サインアウト リンクを使用して試し、ログを確認したところ、次の結果が得られました。
Started GET "/signout" for 127.0.0.1 at 2012-11-22 00:15:08 +0800
Processing by SessionsController#destroy as HTML
Redirected to http://localhost:3000/
Completed 302 Found in 1ms
Started GET "/" for 127.0.0.1 at 2012-11-22 00:15:08 +0800
Processing by HomeController#index as HTML
Rendered home/index.html.erb within layouts/application (0.4ms)
Rendered layouts/_messages.html.erb (0.1ms)
Completed 200 OK in 13ms (Views: 12.9ms)
Started POST "/unloading" for 127.0.0.1 at 2012-11-22 00:15:08 +0800
Processing by HomeController#unloading as */*
Parameters: {"p1"=>"1"}
WARNING: Can't verify CSRF token authenticity
Completed 500 Internal Server Error in 0ms
NoMethodError (undefined method `id' for nil:NilClass):
app/controllers/home_controller.rb:43:in `unloading'
最初の部分はサインアウトで、ユーザーはルートにリダイレクトされ、ポスト (「/unloading」) を実行します。
「/unloading」を最初に実行してから、アンロード アクションが何であれ実行する方法はありますか?
これをjquery投稿として持っています
$(window).unload ->
$.ajax {
async: false,
beforeSend: (xhr) ->
xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'))
, url: '/unloading'
, type: 'Post'
, data: {
p1: '1'
}
}
アップデート
だから私はajaxリクエストをbeforeunloadに転送しましたが、それは機能していましたがreturn null
、表示されているダイアログボックスを削除する必要がありました.このページを離れたい」)。結果は次のとおりです。
window.onbeforeunload ->
$.ajax {
async: false,
beforeSend: (xhr) ->
xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'))
, url: '/unloading'
, type: 'Post'
, data: {
p1: '1'
}
}
return null
また、今のところChromeでのみ試しましたが、期待どおりに機能しています。まだ他のブラウザで試す必要があります。