我有一页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
- 数据重新填充表单。因此,我将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
以某种方式没有完全重新加载有关,因为加载了其他页面......)
答案 0 :(得分:0)
你需要设置一个计时器,在一些超时后,再次将值重置为true(你不应该使用大于100ms)
window.setTimeout('needToConfirm=true', 100);
将其放入onclick 因此,当有内容显示时,页面会自动重新加载,但是当只有附件时,计时器会自动启动