簡體   English   中英

下載帶有ajax調用的文件

[英]Download a file with an ajax call

我使用PHPExcel讀取excel模板,填充數據,並要求用戶下載文件。

generate_excel.php

$objPHPExcel = PHPExcel_IOFactory::load("./template.xlsx");
//populate data ...
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="01simple.xlsx"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');

當我直接從瀏覽器打開generate_excel.php時,會下載結果文件。 但是如果我對generate_excel.php進行ajax調用,我就不會得到下載提示。 使用chrome開發人員工具,我可以從“網絡”選項卡中看到ajax調用已成功完成,並且在響應數據中看到了一堆隨機字符。 我假設那是excel對象。

有誰知道如何使用ajax實現下載excel功能? 我不想刷新頁面。 當用戶點擊“導出”按鈕時,應該對php文件進行ajax調用並提示用戶下載。

謝謝!

我找了一些方法將帶有ajax的JSON數據傳遞給PHP並返回一個excel文件(MySQL和PHPExcel)供用戶保存。 我環顧四周,把一些碎片放在一起,希望它可以幫助某人:

jQuery的:

$("#exportBotton").on("click",function(event) {
event.preventDefault();
// create json object;
str_json = JSON.stringify({"key01":val01, "key02":val02, "key03":val03});
        $.ajax({
              type: "post",
              data: str_json,
              url: "../../includes/dbSelect_agentFormExport.php",
              dataType: "json",
              success: function(output){
                          // output returned value from PHP t
              document.location.href =(output.url);
            }
       });
});

PHP:

 $str_json = file_get_contents('php://input');
 $objPHPExcel = new PHPExcel();
 // here i populated objPHPExcel with mysql query result.....

 function saveExcelToLocalFile($objWriter){
    // make sure you have permission to write to directory
    $filePath = '../tmp/saved_File.xlsx';
    $objWriter->save($filePath);
    return $filePath;
}

 $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
 $response = array(
     'success' => true,
     'url' => saveExcelToLocalFile($objWriter)
 );
 echo json_encode($response);
 exit();

並非一切都應該用AJAX完成。 有時普通的舊HTML更適合工作。 我想你的按鈕有a標簽? 你為什么不做這樣的事

<a href="generate_excel.php" target="_blank">Export to Excel</a>

在你的HTML? 注意target="_blank"部分。 它是為了確保您的頁面不被重新加載。

對於input您可以使用構造

<form action="generate_excel.php" target="_blank"><input type="button">...whatever</form>

我不認為你可以通過ajax調用下載任何東西。 而不是您可以生成並保存服務器中的Excel(臨時)並向用戶顯示下載鏈接。

找到了一種方法,雖然我不確定這是否是一種理想的方法。

我在頁面中添加了一個隱藏的iframe。 當ajax調用返回時,它返回所創建數據的url。 我使用javascript將iframe重定向到自動觸發下載操作的url。

你可以這樣試試:

  1. 發送Jquery AJAX POST請求,其中包含用於生成Excel報告的數據,並將該數據存儲在會話變量中。 返回一個像“success”這樣的任意字符串作為響應。
  2. 如果上述AJAX調用的輸出是“成功”,則對應用程序中的另一個URL執行GET請求,從會話中讀取數據(存儲在第一步中,否則拋出錯誤),准備一個excel文件該數據,並強制下載該excel文件到瀏覽器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM