当用户点击链接/返回/退出页面时,我需要处理php文件。它是保存用户信息流程的一部分。如果我执行jquery卸载,我将如何激活php文件以加载和处理。
jQuery(window).bind(“unload”,function(){ //我应该添加什么? });
答案 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() {....}