Javascript 是否在卸载时处理页面?

Javascript 是否在卸载时处理页面?,javascript,jquery,Javascript,Jquery,当用户单击链接/返回/退出页面时,我需要处理一个php文件。它是保存用户信息过程的一部分。如果我执行jquery卸载,我将如何启动php文件进行加载和处理 jQuery(window).bind(“unload”,function()){ //我应该补充什么? }); 您应该在卸载前使用事件。您可以在那里触发一个同步的ajax请求 $(window).bind('beforeunload', function() { $.ajax({ url: 'foo',

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

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

您应该在卸载前使用
事件。您可以在那里触发一个同步的ajax请求

$(window).bind('beforeunload', function() {
   $.ajax({
       url:    'foo',
       async:  false,
       // ...
   });
});
请注意,一些旧浏览器不支持
onbeforeuload
。即使这种技术有效,我也不确定你能(应该?)阻止这个事件多久。如果该请求会阻塞几秒钟,那么将是一个非常糟糕的用户体验


一个很好的折衷办法可能是告诉用户,有些东西已经改变了,但还没有保存。通过一些布尔检查完成此操作,最后在
onbeforeuload
请求中返回
字符串值。然后,浏览器会优雅地询问用户是否真的想离开您的站点,并显示您提供的字符串。

您应该在卸载前使用
事件。您可以在那里触发一个同步的ajax请求

$(window).bind('beforeunload', function() {
   $.ajax({
       url:    'foo',
       async:  false,
       // ...
   });
});
请注意,一些旧浏览器不支持
onbeforeuload
。即使这种技术有效,我也不确定你能(应该?)阻止这个事件多久。如果该请求会阻塞几秒钟,那么将是一个非常糟糕的用户体验


一个很好的折衷办法可能是告诉用户,有些东西已经改变了,但还没有保存。通过一些布尔检查完成此操作,最后在
onbeforeuload
请求中返回
字符串值。然后,浏览器会优雅地询问用户是否真的想离开您的站点,并显示您提供的字符串。

我猜同步AJAX调用可能会奏效

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

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

我猜同步AJAX调用可能会起作用

$.ajax({
    async: true,
    url: '/foo/',
    success: function(data) { 
        // Finished.
    }
});
$(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 );
               }
             });

    }

}
当然,请记住,这些都不能保证会发生。我的浏览器可能会崩溃。我的电脑甚至可能断电。当然,我可能会禁用JavaScript。因此,如果方便的JavaScript技术实际上不起作用,您肯定需要一种服务器端处理方法

$(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有一个错误:

或使用本机函数:

window.onbeforeunload = function() {....}
确保您已经升级了jQuery的版本。jQuery版本1.3.2有一个错误:

或使用本机函数:

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

Javascript在浏览器中运行,php在服务器上运行(除非您运行的是node.js或其他东西,但我怀疑在本例中不是),因此Javascript需要与某些东西对话,比如ajax,以触发后端的某些东西。Javascript在浏览器中运行,php在服务器上运行(除非您正在运行node.js或其他东西,但我怀疑在本例中不是这样)所以javascript需要与某些东西对话,比如ajax,以在后端触发某些东西。所以我可以做一些类似url:“/files/save.php”…我需要其他编码吗?@acctman:是的,但是你应该添加
data
属性,这样实际上可以正确地传输一些日期。无论如何,在考虑过这一点之后,这可能不是一个好主意是的。我用一种更方便的方式扩展了我的答案,优雅地问。好吧,我想你把我弄丢了。对于像我这样的javascript新手来说,最容易实现的方法是什么。一种可靠的方法是,我的php文件已经准备好了,只需要处理它,只需要快速调用它。谢谢。这样我就可以像url:'/files/sa这样做了ve.php“…我还需要其他编码吗?@acctman:是的,但是你应该添加
data
属性,我实际上会正确地传输一些日期。无论如何,考虑过这一点后,这可能不是一个好方法。我用一种更方便的方式扩展了我的答案,优雅地问。好吧,我想你把我弄丢了。javascript新手最简单的方法是什么我喜欢自己来实现。这将是可靠的,我的php文件准备好去只是需要它被处理,只是需要一个快速的方式调用它。谢谢。