单击按钮并更改位置后刷新页面

时间:2012-08-21 11:03:16

标签: php javascript html

我有一个按钮,通过使用javascript将页面的位置更改为我的php脚本来生成word文档,该脚本在使用以下位置更改位置的同一页面上输出文件:

header('Content-type: application/vnd.openxmlformats-officedocument.wordprocessingml.document');
header('Content-Disposition: attachment; filename="' .$templateName . '.docx"');
readfile( $tempFileName);

无论如何,当我单击按钮时,php脚本更改会更改包含按钮的页面所包含的一行数据。单击按钮后,它只生成word文档,但刷新页面,因此,用户会认为该按钮仅具有生成word文档但不更改记录的效果刷新页面后,用户会注意到按钮的差异。

我的按钮的HTML是这样的:

<input type="button" value="Generate Final Demand" onClick="self.location='DOCXGenerateDocument.php?templ=finaldemand&invoiceid=<?=$_GET['id']?>'">

有关于如何在文档恢复后完成刷新页面任务的任何想法吗?

3 个答案:

答案 0 :(得分:0)

一种解决方案是使用setTimeout()并猜测页面何时应该返回,然后在超时触发时执行document.location.reload(true)

它不漂亮,但它应该完成工作。

答案 1 :(得分:0)

使用self.location

而不是window.location

e.g。 onClick="window.location='DOCXGenerateDocument.php?templ=finaldemand&invoiceid=<?=$_GET['id']?>'"

如果有效,请告诉我。
 有关更多参考,您可以在MDN上查看此link

答案 2 :(得分:0)

执行此操作的一种相对简单的方法是利用PHP中的会话锁定。我们假设您的DOCX生成脚本使用会话,并且在脚本结束之前不会释放它。现在,如果浏览器尝试加载另一个也使用会话的PHP脚本,则第二个脚本将停止,直到第一个脚本完成。使用“location.reload()”将第二个脚本设置为动态加载的Javascript,然后就可以得到所需的内容。

开始下载的功能:

function getDoc() {
    self.location='DOCXGenerateDocument.php?templ=finaldemand&invoiceid=<?=$_GET['id']?>';
    setTimeout("var s = document.createElement('SCRIPT'); s.src = 'read.js.php'; document.body.appendChild(s);", 100);
}

重装脚本:

<?php session_start(); ?>
location.reload();