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

Php 单击按钮并更改位置后刷新页面,php,javascript,html,Php,Javascript,Html,我有一个按钮,通过使用javascript将页面位置更改为我的php脚本来生成word文档,php脚本在同一页面上输出文件,该页面的位置通过以下方式更改: header('Content-type: application/vnd.openxmlformats-officedocument.wordprocessingml.document'); header('Content-Disposition: attachment; filename="' .$templateName . '.doc

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

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']?>'">

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


它不漂亮,但应该能完成任务。

使用
窗口位置,而不是执行
自我定位

e、 g。
onClick=“window.location='DOCXGenerateDocument.php?temp=finaldemand&invoiceid=”

让我知道这是否有效。

有关更多参考信息,您可以在MDN上查看这一点。

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

函数启动下载:

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);
}
函数getDoc(){ self.location='DOCXGenerateDocument.php?temp=finaldemand&invoiceid='; setTimeout(“var s=document.createElement('SCRIPT');s.src='read.js.php';document.body.appendChild;”,100); }
重新加载脚本:

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

location.reload();

您的php.ini中是否启用了shorttags,或者您是否使用了php 5.4?我使用最新版本的php并启用了shorttags。页面未刷新,数据未加载到页面上。不幸的是,脚本未使用会话,因此解决方案变得无用。然后使用flock()。将随机生成的数字传递给两个脚本,并让它们尝试锁定同一个临时文件。