###前提・実現したいこと
PHP(CakePHP)で項目を選択してCSV出力する実装をしています。
ajaxでリクエストを送り、CSVダウンロードが始まるようにしたいです
###発生している問題・エラーメッセージ
ajaxリクエスト自体はうまくいっています。
コントローラー側でうまくとれていないようです。
###該当のソースコード
コントローラー側
PHP
1public function index() 2{ 3//CSV出力がクリックされた場合は検索結果を持ってる$queryを引数にexport()アクションへ 4 if($this->request->query('csv') === 'true'){ 5 $this->setAction('export',$query); 6 } 7} 8 9public function export($query) 10 { 11 12 $Export_Table = TableRegistry::get('Export_Dbackorders'); 13 $clumns = $Export_Table->find('all')->combine('value','name')->toArray(); 14 15 if($this->request->is(['ajax']) && $this->request->query('export') === 'true'){ 16 17 $results = $query->hydrate(false)->toArray(); 18 $request = $this->request->query; 19 $select_clumns = isset($request['select_clumns']) && $request['select_clumns'] !== '' ? $request['select_clumns'] : FALSE; 20 21 stream_filter_register('eolFilter', 'App\\Filters\\CsvEolFilterHelper'); 22 stream_filter_register('encodeFilter', 'App\\Filters\\CsvEncodeFilterHelper'); 23 24 $fp = fopen('php://output', 'w'); 25 26 // フィルタを開いたストリームに付加する 27 stream_filter_append($fp, 'eolFilter'); 28 stream_filter_append($fp, 'encodeFilter'); 29 30 // ダウンロードさせる 31 header('Content-Type: text/csv'); 32 header('Content-Disposition: attachment; filename="テスト.csv"'); 33 34 include ('../config/myconf/csvExport/Hoges.php'); 35 36 $this->autoRender = false; 37 38 //////////////////////////////////////////////////////////// 39 //fclose — オープンされたファイルポインタをクローズする 40 //////////////////////////////////////////////////////////// 41 42 fclose($fp); 43 } 44 45 $this->set('clumns', $clumns); 46 $this->set('title', 'CSVエクスポート'); 47 }
javascript側
javascript
1$(function() { 2 $("#submit").click(function() { 3 var results = []; 4 5 var result = $("#sortable").sortable("toArray"); 6 $(result).each(function() { 7 8 results.push('select_clumns[]='+ this); 9 10 }); 11 12 str = results.join('&'); 13 console.log(str); 14 //window.location.href = location.href + "&export=true&" + ; 15 //$(this).attr("href", location.href + "&export=true&" + results); 16 17 $("#result").val(results); 18 $.ajax({ 19 url: location.href + str, 20 processData: false, 21 contentType: false, 22 type: "GET", 23 }).done(function (response) { 24 alert("success"); 25 }).fail(function () { 26 alert("failed"); 27 }); 28 }); 29});
###補足情報(言語/FW/ツール等のバージョンなど)
location.href + str
には
http://localhost/test/hoges?freeword=%E6%A03&select_clumns[]=id&select_clumns[]=dbo01&select_clumns[]=dbo02
が入っています。
alert("success");
になるので、ajax側は問題ないかと考えています。
ちなみに、ajaxではなくコメントアウトしている
window.location.href = location.href + "&export=true&" + ;
で行うとCSVダウンロードが開始されます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/28 04:46