开发者

process a page on UnLoad?

开发者 https://www.devze.com 2023-01-25 00:33 出处:网络
I need for a php file to process when t开发者_高级运维he user click a link/go back/exits a page. Its part of a saving user info process. if i do a jquery unload how would I fire the php file to load a

I need for a php file to process when t开发者_高级运维he user click a link/go back/exits a page. Its part of a saving user info process. if i do a jquery unload how would I fire the php file to load and process.

jQuery(window).bind("unload", function() { // what should i add? });


$(document).ready(function() {   
    $(':input',document.myForm).bind("change", function() { 
       setConfirmUnload(true); 
    }); // Prevent accidental navigation away
});

function setConfirmUnload(on) {
     // To avoid IE7 and prior jQuery version issues   
     // we are directly using window.onbeforeunload event
     window.onbeforeunload = (on) ? unloadMessage : null;
}

function unloadMessage() {

    if(Confirm('You have entered new data on this page.  If you navigate away from this page without first saving your data, the changes will be lost.')) {

            $.ajax({
               type: "POST",
               url: "some.php",
               data: "name=John&location=Boston",
               success: function(msg){
                 alert( "Data Saved: " + msg );
               }
             });

    }

}

Make sure you have upgraded version of jQuery. jQuery version 1.3.2 had a bug:

Ticket #4418: beforeunload doenst work correctly

Or use native function:

window.onbeforeunload = function() {....}


I'm guessing a synchronous AJAX call might work.

$.ajax({
    async: true,
    url: '/foo/',
    success: function(data) { 
        // Finished.
    }
});

Of course, keep in mind there's no guarantee any of this will ever happen. My browser may crash. My computer may even power down. And of course I may disable JavaScript. So you'll definitely need a server-side way of handling this in case the convenient JavaScript technique doesn't actually work.


You should use the beforeunload event. You can fire a synchronised ajax request in there.

$(window).bind('beforeunload', function() {
   $.ajax({
       url:    'foo',
       async:  false,
       // ...
   });
});

Be aware that onbeforeunload is not supported by some older browsers. Even if this technique works, I'm not sure how long you can (should?) block this event. Would be a pretty bad user experience if that request would block a few seconds.

A good trade-off is probably to tell the user that something has changed what was not saved yet. Do this with a few boolean checks and finally return a string value in the onbeforeunload request. The browser will then gracefully ask the user if he really wants to leave your site, also showing the string you provided.

0

精彩评论

暂无评论...
验证码 换一张
取 消