我有一个按钮,通过使用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']?>'">
有关于如何在文档恢复后完成刷新页面任务的任何想法吗?
答案 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();