2010-11-15 43 views
0

我需要一个php文件来处理,当用户点击链接/返回/退出页面。它是保存用户信息过程的一部分。如果我做一个jQuery的卸载,我将如何激发PHP文件加载和处理。 (window).bind(“unload”,function(){ //我应该添加什么内容? });}};}};}};在UnLoad上处理一个页面?

+0

的JavaScript在浏览器中运行,PHP运行在服务器上(除非你正在运行的node.js或东西但我不认为在这种情况下),所以JavaScript需要谈论的东西,认为阿贾克斯,在后端触发的东西。 – PurplePilot 2010-11-15 20:28:37

回答

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有一个bug:

Ticket #4418: beforeunload doenst work correctly

或使用本机功能:

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

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

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

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

一个很好的权衡可能会告诉用户某些东西已经改变了什么还没有保存。用一些布尔检查做这件事,最后在onbeforeunload请求中返回一个string value。然后,浏览器将优雅地询问用户他是否真的想离开您的网站,并显示您提供的字符串。

+0

所以我可以做一些像网址:'/files/save.php'..我需要任何其他编码? – acctman 2010-11-15 20:34:31

+0

@acctman:是的,但你应该添加'数据'属性ti实际传输一些日期的权利。无论如何,在考虑后,这可能不是一个好方法。我用更方便的方式扩大我的答案,优雅地问。 – jAndy 2010-11-15 20:39:27

+0

好吧,我想你失去了我。像我这样的javascript newb最容易实现的方法是什么?一个可靠的,我的PHP文件已准备就绪,只需要处理它,只需要一个快速调用它的方法。谢谢。 – acctman 2010-11-15 20:56:31

1

我猜一个同步AJAX调用可能工作。

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

当然,请记住,这不会有任何担保会发生。我的浏览器可能崩溃。我的电脑甚至可能会关机。当然,我可能会禁用JavaScript。所以你一定需要一个服务器端的方式来处理这种情况,以防万一方便的JavaScript技术实际上不起作用。

相关问题