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