我的问题是:
按下我页面上的链接将(通过引用的php文件)调用一个从我的webservice下载文件的函数。这意味着标题信息是在文件下载时发送的,这也意味着我无法调用php标头函数将BACK重定向到我初始页面,在那里我点击了开头的链接。我想回到该页面的原因是它将更新我最新下载文件的历史记录,但不会在下载文件之前更新。
克服这一障碍的最佳方法是什么?
我的功能启动下载:
public function downloadAuthorityRules($api_key,$id)
{
$curl_post_data = array('id' => $id);
$headers = array('Content-type: application/json','Authorization: '.$api_key,);
$fp = fopen (dirname(__FILE__) . '/localfile.tmp', 'w+');//This is the file where we save the information
$curl = curl_init(DOWNLOAD_AUTHORITYRULES);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($curl_post_data));
curl_setopt($curl, CURLOPT_USERPWD, $api_key);
$file = curl_exec($curl);
if ($file === false)
{
$info = curl_getinfo($curl);
curl_close($curl);
die('error occured during curl exec. Additioanl info: ' . var_export($info));
}
curl_close($curl);
header('Content-type: ' . 'application/octet-stream');
header('Content-Disposition: ' . 'attachment; filename=myndighedsregler.pdf');
echo $file;
}
答案 0 :(得分:1)
下载完成后,您无法从下载页面重定向。这是不可能的。
在开始提供文件之前,您需要在下载页中更新db表。然后显示下载历史记录的主页会在下次刷新时自然更新(假设您正确设置了无缓存标头)。
是的,我知道,你想强迫它更新。但你不能按照你的想法去做。
克服这一障碍的最佳方法是什么?
你可以从主页进行Ajax轮询,每隔几秒刷新一次DIV的内部。您需要确保在cache: false
调用中设置$.ajax()
(如果使用jQuery,我建议您为Ajax执行此操作)。否则,由于浏览器缓存Ajax结果,主页上的信息可能不会提取新数据。
答案 1 :(得分:0)
找到解决我的重定向问题的另一种方法,这可能对其他人有用:
我的网页目前使用AJAX将内容加载到我的DIV&#S; S中,因此我已经有一个名为loadPage的javascript函数。
我做的是实现一个名为delayedLoadPage的函数,它只使用setTimeout,如下所示
function delayedLoadPage(page)
{
setTimeout(function() { loadPage(page);},5000);
}
此函数将在5秒钟后调用loadPage。
我改变了我对下载所在的php的引用,并添加了一个onclick事件
<a onclick="javascript:delayedLoadPage('authorityRules.php')" href="<? echo "downloadAuthorityRules.php?id=".$auth_current['auth_rules'][0]['id'];?>" >
结果是,文件将开始下载,5秒后,当超时发生并调用loadPage时,我的页面会重新加载。