2012-09-03 46 views
0

我很確定我在想這個,但我只是無法弄清楚。我有一個dojo Button對象,當它被點擊時,我想執行一個.php文件。 php腳本運行查詢並從中構建一個.xls文件,然後提示用戶下載或打開。在Dojo按鈕上執行PHP腳本點擊

當我點擊按鈕,我得到「加載xhrGet」日誌,但提示從不出現,所以我不相信該腳本實際上正在運行。

  <button data-dojo-type="dijit.form.Button" id="export_xls_button">Export to .xls 
       <script type="dojo/method" data-dojo-event="onClick" > 
        dojo.xhrGet({ 
         url: 'subRoutines/exportXLS.php', 
         load: function(response){ 
          console.debug("loaded xhrGet"); 
         }, 
         error: function(error){ 
          console.debug("error loading xhrGet"); 
         } 
        }); 
       </script> 
      </button> 

謝謝你的任何幫助或建議。

編輯:當我在Web瀏覽器中直接訪問它並在服務器上打開php時,腳本運行得很好。

+1

有你使用螢火蟲檢查ajax請求? – j0k

+0

看起來像它得到某種混亂的反應,類似於我試圖導出的表。也許它是顯示下載提示的問題。回覆:http://pastebin.com/7T7eFazB – FuegoFingers

回答

3

您不需要使用XHR來導出文件。您可以使用點擊標準鏈接(或dojo按鈕),點擊該鏈接時,執行subRoutines/exportXLS.php。當單擊鏈接時,腳本像正常一樣構建文件,並將文件和適當的http標題發送回用戶而不離開頁面。沒有新的位置標題被髮送到瀏覽器,只是一個文件。

這是一個簡單的方法,我用它來輸出AA CSV文件PHP(您可能只需要頭):

$fh = fopen("php://output", 'w'); 
fputcsv($fh, $csv_headers_array, ",", '"'); 
foreach ($csv_content_array as $line) { 
    fputcsv($fh, $line, ",", '"'); 
} 
header("Content-type: text/csv"); 
header("Content-Disposition: attachment; filename=filename.csv"); 
fclose($fh); 
exit; 

而且你的道場按鈕變成類似:

<button data-dojo-type="dijit.form.Button" id="export_xls_button"> 
    Export to .xls 
    <script type="dojo/method" data-dojo-event="onClick" > 
     window.location = 'subRoutines/exportXLS.php'; 
    </script> 
</button> 
+0

非常感謝你的完美工作。 – FuegoFingers