0

我有一个按钮,它通过使用 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']?>'">

对文档返回后如何完成刷新页面的任务有任何想法吗?

4

3 回答 3

0

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

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

于 2012-08-21T12:24:20.150 回答
0

而不是做self.location,使用window.location

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

让我知道这个是否奏效。
如需更多参考,您可以查看 MDN 上的此链接

于 2012-08-21T13:15:41.300 回答
0

一种相对简单的方法是利用 PHP 中的会话锁定。让我们假设您的 DOCX 生成脚本使用会话并且在脚本结束之前不会释放它。现在,如果浏览器尝试加载另一个也使用 session 的 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();
于 2012-08-21T15:44:13.363 回答