我有一个页面insert.php
,用户可以在其中输入表单。
当页面关闭时,我使用javascript通知用户插入的数据可能丢失。
<script language="JavaScript">
var needToConfirm = true;
window.onbeforeunload = confirmExit;
function confirmExit() {
if ( needToConfirm )
return "This page is asking you to confirm that you want to leave - data you have entered may not be saved.";
}
</script>
然后我有一个表单,其中包含一个元素来下载("保存")插入的数据。
<form action='insert.php' method='post'>
... other input elemets ...
<input type="submit" name="save" value="Save" onclick="needToConfirm = false;">
</form>
当按下这个保存按钮时,没有数据丢失,因为表单只是重新加载自己并使用$_POST
-data重新填充表单。因此,我将needToConfirm
变量设置为false
,以免用户担心。
此外,$_POST
数据在重新加载页面(insert.php
)时下载,使用:
session_start();
... store $_POST in $_SESSION ...
Header( 'HTTP/1.1 301 Moved Permanently');
Header($'Location: save.php');
在save.php
中我这样做:
session_start();
header( 'Content-disposition: attachment; filename=download.dat' );
... echo $_SESSION-data ...
这将下载插入的数据而不关闭已经加载的insert.php
。
问题是javascript needToConfirm
-变量停留在false
上。因此,当我在点击下载后关闭页面时(即使下载没有得到用户的确认),不再显示任何警告,数据可能丢失。
如果你能想出解决这个问题的办法,我将不胜感激。
(我猜这个问题是有关insert.php
不知怎的没有完全重新加载由于其他页面的加载…)
您需要设置一个计时器,并在超时后,将值再次重置为true(您不应该使用大于100ms的值)
window.setTimeout('needToConfirm=true', 100);
放到onclick中因此,当有内容要显示时,页面会自行重新加载,但当只有附件时,计时器会触发