Sto provando a fare un post sul server prima di scaricare una pagina e ho seguito this e funziona correttamente. Il mio problema è $ .post su window.unload è attivato dopo che ha scaricato. Ho provato con un collegamento signout e controllando il mio log, ottengo il seguente:I trigger di Window.unload post dopo lo scaricamento
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'
prima parte è il signout e allora l'utente viene reindirizzato a sradicare poi si corre il palo ('/ scarico') .
C'è un modo per eseguire "/ scaricare" prima di eseguire qualsiasi azione di scarico?
ho questo come il mio post 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'
}
}
Aggiornamento
così ho fatto trasferire la richiesta Ajax per beforeunload e che stava lavorando, ma ho dovuto fare un return null
per rimuovere la finestra di dialogo apparendo perché se non lo faccio, l'ajax si stava ancora attivando sul popup di dialogo (anche senza rispondere "sì/no voglio uscire da questa pagina"). Il risultato è questo:
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
Inoltre, ho provato solo con Chrome per ora e che sta funzionando come previsto. Eppure per provare altri browser.
Scusa se la mia risposta è stata un po 'troppo tardi. Ho provato ad aggiungere l'intero blocco Ajax a beforeunload prima, ma mi fa sempre una domanda prima di 'Sei sicuro di voler lasciare questa pagina?' con un [oggetto oggetto] come messaggio aggiunto. Ho cercato prima e penso che questo fosse lo scopo di beforeunload ... come posso rimuoverlo? – index
E grazie per le informazioni che scaricano l'evento viene attivato quando la pagina è già stata scaricata. – index
Prova a restituire 'null' dalla funzione' beforeUnload' http://stackoverflow.com/questions/1119289/how-to-show-the-are-you-sure-you-want-to-navigate-away-from- questa-pagina-quando-ch – nickaknudson