1

Laravel5.1を使用しています。

jQuery ajax 呼び出しは次のように行われます。

$('#export_selected').click(function(){
                var checked = $('.select_rows:checked');
                var ids     = [];
                $.each(checked, function(index, value){
                    ids.push(value.id);
                })
                $.ajax({
                    method : "POST",
                    url    : "{{URL::to('/spot/exportTable')}}",
                    data   : {ids:ids}
                });
            });

そして、php メソッドは次のように定義されます。

public function exportTable(Request $req) {
            $spots = array_flatten($req->all());
            $res   = Spot::whereIn('id', $spots)->get();

            Excel::create('Spots', function($excel) use($res) {
                $excel->setTitle('Title goes here');
                $excel->setCreator('Creator Goes Here')->setCompany('Company Goes Here');
                $excel->sheet('Excel sheet', function($sheet) use($res) {
                    $sheet->setOrientation('landscape');
                    $sheet->fromArray($res);
                });
            })->store('csv', storage_path('/exports', true));

            $file    = base_path() . '/storage/exports/Spots.csv';
            $headers = ['Content-Type: application/csv',  'Content Description: File Transfer', 'Cache-Control: must-revalidate, post-check=0, pre-check=0'];
            return response()->download($file, 'Spots.csv' , $headers);
    }

Chrome 開発者コンソールは、結果を生の行として出力します。

ファイルは正常にエクスポートされ、ディスクに作成されます。

ファイルへのパスは正しいです。

しかし、ダウンロードは決して開始されません。

応答をエコーすると、次のようになります。

HTTP/1.0 200 OK
0:                   Content-Type: application/csv
Cache-Control:       public
Content-Disposition: attachment; filename="Spots.csv"
Date:                Mon, 26 Oct 2015 16:08:26 GMT
Last-Modified:       Mon, 26 Oct 2015 16:08:26 GMT
1:                   Content-Description: File Transfer
2:                   Cache-Control: must-revalidate, post-check=0, pre-check=0
4

1 に答える 1