cakephpでajaxを使用してExcel作成・ファイルをダウンロード

本日は、cakephpでajaxを使用してExcelファイルを出力・ダウンロードの仕方です。

やはり前提知識が全然ないので、かなり迷いました。

実現したい事

jsでajaxの設定。

PHPでExcelファイルを作成。

作成したExcelファイルをダウンロード。

こんな感じの処理を作ろうと思いました。

困った事

ajaxでコントローラーを呼び出し、Excelの出力まではうまく動いていました。

ただ、ダウンロードだけがうまくいかず、、、

headerを何度も書き換えたり、readfileについて調べまくりましたが全然わからず。

解決

javascript

var ajaxurl = 'コントローラー/関数名';
var data = {data : 'aiueo'};

$.ajax({
	url: ajaxurl,
	type: "POST",
	data: data,
	dataType: "text",
	success : function(response){
        location.href='コントローラー/関数名';
		console.log('通信成功');
	},
	error: function(){
		//通信失敗時の処理
		console.log('通信失敗');
	}
});

controller.php

$this->autoRender = false;
$filepath = WWW_ROOT . 'syuturyoku.xlsx';

if($this->request->is('ajax')) {
        Excelの出力処理
} else {
    // ファイルをダウンロードする処理
    header("Content-Type: application/octet-stream");
        header('Content-Disposition: attachment; filename="aaa.xlsx"');
        readfile($filepath);
}

ajaxでコントローラーを呼び出して、Excelの出力とダウンロードを同時に実行していました。

それでなんで動かなかったのかは謎ですけど、Excelの出力とダウンロードを分けることによって成功しました。

とりあえず、ダウンロードをするときはURLを直接呼び出してあげるのが確実って解釈で大丈夫ですかね?

まとめ

今回はcakephpでajaxを使用してExcel作成・ファイルをダウンロードについてでした。

かなり調べても出てこなかったので、参考になると幸いです。

まぁ、もっと基礎知識があればこんなことにはなってなかったんでしょうけどね。。。

コメント

タイトルとURLをコピーしました