我有一个简单的小脚本,它合并来自远程服务器的文件。
合并操作是$ _POST操作的一部分。因此,当我发布时,我希望能够警告用户随后的合并操作和响应将需要几秒钟才能完成。当然,在POST之后放置一个js或swal警告消息。
然而,警告消息不会弹出,直到PHP处理全部完成,到那时警告有点无意义。我已经尝试了很多方法(比如JQ隐藏了基于按钮点击显示警告div),但最终我的所有尝试都陷入了同一个陷阱 - PHP想要先运行并且必须遵循消息。
任何人都有任何想法(或者我是不是在调制服务器端事件例程)?
(ps我无法更改下面的脚本。这里的shell命令是先决条件)
<?php
if (isset($_POST['options']))//FINAL GENERATE BUTTON
{
//JS ALERT OR SWAL OR MODAL MESSAGE---------> "MIGHT TAKE A WHILE THIS"
if (false!==file($attach_source))//cannot use if file_exists on a remote server poll. Use the $file() function instead
{
file_put_contents
(
$attach_dest,//destination path.filename (ON SERVER)
file_get_contents($attach_source)//source file
);
}
else
{
echo 'STUFF';
}
//MERGE...
$fileArray= array($deposit_info,$attach_dest);
//set up target path/file for merged
$outputName = $final_path.$front.$propertyid.".pdf";
//ghostscript command line--does the merging then puts the
merged file into $outputName (off-the-shelf script)
$cmd = "gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -
sOutputFile=$outputName ";
foreach($fileArray as $file)
{
$cmd .= $file." ";
}
$result = shell_exec($cmd);
.............
}
?>
答案 0 :(得分:2)
这需要你重新考虑一下你的逻辑......
如果你正在使用jQuery,你应该使用jQuery来启动对PHP脚本的调用,而不是让PHP脚本运行并尝试通过JavaScript发出警告,因为 PHP必须在JavaScript之前完成运行输出到浏览器。这是一个例子:
Console
每当调用AJAX请求时,都会自动调用前两个函数。
你需要PHP执行的任何后续工作也应该由AJAX请求调用,因为(如上所述)从PHP输出JS需要PHP在输出JS之前完成,因为PHP没有在输出时与客户端交互(有方法可以做到这一点,但它们会发臭)。
答案 1 :(得分:1)
我认为您需要在Javascript中修复此客户端。使用jQuery ...
$('#my-submit-button').click(function() {
$('#my-warning-message').show();
$('#my-form').submit();
});
在提交POST的HTML页面中包含警告消息(在<div id="my-warning-message" style="display:none">
内)(而不是在响应HTML中)。单击提交按钮(id="my-submit-button")
)后,将执行此JS片段。它将显示警告(您可能希望以不同的方式显示它),并在显示后,将表单数据提交到PHP脚本。用户将看到警告,因为PHP正在服务器端处理表单数据。