在UnLoad上处理页面?

时间:2010-11-15 20:25:45

标签: javascript jquery

当用户点击链接/返回/退出页面时,我需要处理php文件。它是保存用户信息流程的一部分。如果我执行jquery卸载,我将如何激活php文件以加载和处理。

jQuery(window).bind(“unload”,function(){     //我应该添加什么? });

3 个答案:

答案 0 :(得分:1)

您应该使用beforeunload事件。您可以在那里触发同步 ajax请求。

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

请注意,某些旧版浏览器不支持onbeforeunload。即使这种技术有效,我也不确定你能阻止这个事件多久(应该?)。如果该请求会阻止几秒钟,那将是一个非常糟糕的用户体验。

良好的权衡可能是告诉用户某些事情已经改变了尚未保存的东西。通过一些布尔检查执行此操作,最后在string value请求中返回onbeforeunload。然后,浏览器会优雅地询问用户是否真的要离开您的网站,同时显示您提供的字符串。

答案 1 :(得分:1)

我猜测同步AJAX调用可能有效。

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

当然,请记住,不保证会发生这种情况。我的浏览器可能崩溃。我的电脑甚至可能掉电。当然,我可以禁用JavaScript。因此,如果方便的JavaScript技术实际上不起作用,你肯定需要一种服务器端方式来处理它。

答案 2 :(得分:1)

$(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 );
               }
             });

    }

}

确保您已升级jQuery版本。 jQuery版本1.3.2有一个错误:

Ticket #4418: beforeunload doenst work correctly

或使用原生功能:

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