2012-03-19 42 views
1

我有一个控制器,其简而言之就是如下:加载页面等待一秒钟,然后使用下载文件笨V2

public function download($id) { 
    $data = array(); 

    force_download($data['brochure']->location, $data['brochure']->name); 
    $this->renderPage('site/download', $data); // simple method basically same as load->view 
} 

我想要的页面视图,然后之后的第二次强制下载文件 - 当前函数下载文件但不是视图,任何人都可以建议如何解决这个问题?

+0

也许在页面加载完成后,你应该在JavaScript的基础上重做一次? – user1278844 2012-03-19 15:01:16

回答

2

删除行从下载功能

force_download($data['brochure']->location, $data['brochure']->name); 

下面一行再写功能

public function download_file($id) { 
    $data = array(); 
    force_download($data['brochure']->location, $data['brochure']->name); 
} 

现在在下载视图中添加下面的JavaScript/jQuery脚本:

$(document).ready(function(){ 
    setTimeout(function(){ 
     downloadFile('<your file location>') 
    },1000); 
}); 

function downloadFile(url) 
{ 
    var iframe; 
    iframe = document.getElementById("download-container"); 
    if (iframe === null) 
    { 
     iframe = document.createElement('iframe'); 
     iframe.id = "download-container"; 
     iframe.style.visibility = 'hidden'; 
     document.body.appendChild(iframe); 
    } 
    iframe.src = url; 
} 
+0

thanks keviv!真的令人印象深刻的东西:-) – Zabs 2012-03-19 15:43:39

+0

没问题,Gaz。我是Vivek BTW;) – vivek 2012-03-19 17:44:35

+1

setTimeout之后的“函数”拼错了 – tofutim 2013-07-03 18:21:19

0

你需要有两个动作:

  1. 要显示的下载页面($this->renderPage(...))。
  2. 使浏览器下载文件(force_download(...))。

在第一个例子中,在头部添加一些javascript或meta标签,以在第二个动作之后向第二个动作重定向。

将显示下载页面,然后在一秒钟之后提供下载。

+0

呃!谢谢你们(不能正确格式化) - 哦,希望它能帮助别人。 setTimeout(“get_download()”,3000);以及其他类型的参数。 function get_download() { window.location.href = <?php echo $ javascript_url?>; } – Zabs 2012-03-19 15:22:52