2011-04-22 64 views
2

我目前正在用php完成一個網頁。發送標題後關閉網頁(php)

基本上有一些數據需要輸出到Excel文件。 所以googleing了一下之後發現了這個PHPExcel項目,並用它輸出了數據。這是完美的。

現在,當上述數據輸出可能發生時,我使用了window.open(URL_OF_THE_MAKEOUTPUT.PHP_FILE_GOES_HERE) javascript函數,以便保存數據的當前窗口保持不變。現在,當Excel文件生成並開始下載到客戶端計算機時,我想關閉第二個窗口。

所以,到現在爲止,我知道我有這小小的一段代碼

header('Content-Type: application/vnd.ms-excel'); 
header('Content-Disposition: attachment;filename=report-'.date('d.m.Y').'.xls'); 

Becouse它的一個問題,我不能做到這一點afterwerds - >

echo "<script>window.close;</script>"; 

我試着用

ob_start("callback"); 

at theryry begin of the page,and

ob_end_flush(); 

最後,但仍然沒有運氣。

任何想法?

Tnx提前!!!

+0

是的,您無法在Excel輸出流中發送原始HTML。 HTTP請求只能有一種內容類型。目前尚不清楚爲什麼你首先打開第二個窗口。如果您發送這些標題,原始內容不會消失。它應該彈出一個下載對話框。 – mario 2011-04-22 06:23:48

回答

2

什麼你可能會想要做的就是用這個來代替:

location.href = URL_OF_THE_MAKEOUTPUT.PHP_FILE_GOES_HERE; 

會重定向到下載腳本,因爲它是一個文件附件,它不會離開當前頁面,而是顯示下載文件對話框從您的瀏覽器。

+0

是的...這使得很多snese ...我會在3分鐘內接受:) tnx! – Andrej 2011-04-22 06:27:20

3

請勿使用window.open打開一個彈出窗口。如果您在主窗口中呼叫您的URL,並且它是一個下載(這是多虧了您的呼叫),您的瀏覽器將變得更加智能,並保持窗口中現有的頁面/數據不變。所以,不需要彈出窗口。

+0

是的。另外,您不能像這樣混合文檔類型;一旦你告訴瀏覽器期待Excel文檔,它就不會解釋任何HTML或JavaScript,因爲它不期望看到任何HTML。 – 2011-04-22 06:25:39