2012-03-19 67 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