2013-04-10 17 views
17

Devo chiamare una funzione JavaScript/jQuery che contiene poche righe di codice, su una pagina PHP quando l'utente chiude la sua finestra/scheda o naviga via facendo clic su un collegamento. Ho provato la funzione onbeforeunload ma viene eseguita solo la parte return "blah blah blah;" e tutto il resto viene ignorato. Ho anche provato il metodo .unload da jQuery ma per qualche motivo questo codice non viene eseguito.Attiva un evento quando l'utente si allontana

$(window).unload(function() { 
    alert('blah blah blah'); 
}); 

Si prega di suggerire alternative. Grazie ..

+1

Che cosa vuoi fare per scaricare? – writeToBhuwan

+1

Ho bisogno di fare una chiamata Ajax a PHP per disinserire una variabile di sessione. –

+0

'navighi via facendo clic su un collegamento' questo mostra che devi eseguire il bind di scarico sul tuo documento – muneebShabbir

risposta

13

Ecco un semplice esempio di lavoro. Qualunque sia la vostra return dal callback unload verrà visualizzato in una conferma popup del browser.

esempio di lavoro di inviare richiesta Ajax prima di scaricare http://jsfiddle.net/alexflav23/hujQs/7/

Il modo più semplice per farlo:

window.onbeforeunload = function(event) { 
    // do stuff here 
    return "you have unsaved changes. Are you sure you want to navigate away?"; 
}; 

in jQuery:

$(window).on("beforeunload", function() { 
    $.ajax("someURL", { 
     async: false, 
     data: "test", 
     success: function(event) { 
      console.log("Ajax request executed"); 
     } 
    }); 
    return "This is a jQuery version"; 
}); 

Guardate nella scheda di rete del browser. Vedrai come viene inviata la richiesta come volevi fare. Basta inviare i dati appropriati.

Tenere presente che tutte le operazioni attivate devono essere sincrone, pertanto è possibile effettuare solo richieste sincrone ajax, ad esempio. Tuttavia, quanto sopra non è completamente affidabile per qualsiasi scopo.

Optare per il backup periodico dei dati utente su localStorage e sincronizzarsi automaticamente con il server. Mantieni il window.onbeforeunload solo come precauzione aggiuntiva, ma non come meccanismo principale. È ben noto causare problemi.

+0

Questo non funziona. Il beforeunload viene sempre chiamato, indipendentemente dal fatto che l'utente confermi o meno l'avviso. Ho bisogno di eseguire un po 'di pulizia, ma voglio solo eseguire la pulizia se l'utente si allontana effettivamente. Come lo posso fare? –

+0

@JohnHenckel Non c'è modo di farlo. – apscience

+1

@apscience, grazie. Sembra che questo sia un difetto nelle specifiche del browser. Ad esempio, voglio creare una pagina Web per modificare una riga in un database e voglio BLOCCARE la riga per impedire ad altri utenti di modificarla. L'unica soluzione che ho trovato è di inviare un heartbeat al server ogni pochi secondi, in modo che il server sappia quando SBLOCCARE. Tuttavia, questo ha un difetto grave, perché mentre ogni casella "conferma" è aperta, il motore JS è in pausa, e quindi l'heartbeat si ferma, anche se l'utente sta ancora modificando! Forse un giorno il browser sostituirà il sistema operativo, ma per ora fa schifo come una piattaforma applicativa! –

Problemi correlati