0

我有一个页面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命令重新加载页面 ( ) 时会下载 -data 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.

问题是 javascriptneedToConfirm变量保持在false. 因此,当我在单击下载后关闭页面时(即使用户未确认下载)不再显示警告并且数据可能会丢失。

任何如何解决这个问题的想法都非常感谢。

(我猜这个问题与insert.php由于加载其他页面而没有完全重新加载有关......)

4

1 回答 1

0

您需要设置一个计时器,并在超时后再次将该值重置为 true(您不必使用大于 100 毫秒的时间)

window.setTimeout('needToConfirm=true', 100);

将其放入 onclick 中,这样当有内容要显示时,页面会自行重新加载,但是当只有附件时,计时器会触发

于 2013-05-23T21:51:56.533 回答