質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

2回答

6492閲覧

javascriptからCSVファイルをダウンロードできない

nabex

総合スコア66

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2016/07/20 03:53

編集2016/07/20 06:10

ダウンロードボタンを押下した後CSVファイルをダウンロードしたいのですがダウンロード出来ません。
ダウンロードボタンを押すと'msgid':'IZ00005 と表示されるのですが、これはajaxの呼び出しに失敗しているということですか?

// Ajaxを呼び出す (同期)
var ajax = new Ajax.Request(

の記述部分の
postBody : 'param=' + postJson,

変数postJson にはダウンロードしたいファイルの日付とIDがはいっていることはデバックで確認出来ました。

おそらくダウンロードするファイルのパスがないのが原因だと思うのですが、どのように付け加えたら良いかわかりません。どなたかご教授をお願い致します。

lang

1 2<input id="dl_id[0]" class=" prts_btn_m" type="button" 3tabindex="" onclick="click_download_button({'dl_id':'261','dl_day':'20160706'});" 4value="ダウンロード" name="dl_id[0]"> 5

lang

1/* 2CSV出力ボタン 3*/ 4function click_download_button(obj) 5{ 6 //clearShw(); // Confirmウィンドウを閉じる 7 8 var dl_day = obj.dl_day; 9 var dl_id = obj.dl_id; 10 11 var postArray = new Object(); 12 postArray['dl_day'] = dl_day; 13 postArray['dl_id'] = dl_id; 14 15 $("dl_day").value = dl_day; 16 $("dl_id").value = dl_id; 17 18 var postJson = com_toJSONString(postArray); 19 //var postJson = JSON.stringify(postArray); 20 21 var url = $('base').value; 22 url += '/sample/downloadCheck'; 23 24 // Ajaxを呼び出す (同期) 25 var ajax = new Ajax.Request( 26 url, 27 { 28 method : 'post', 29 //postBody : 'json=' + postJson, 30 postBody : 'param=' + postJson, 31 asynchronous : false, 32 onLoading : openLoadingWin(com_getMsg({'msgid':'IZ00005', 33 'msglist':comMsg})), 34 onSuccess : fileExistsSuccess, 35 onFailure : fileExistsFailure, 36 onException : fileExistsException 37 } 38 );

lang

1public function executeDownloadCheck() 2 { 3 $this->modelobj = new apedi3u120EntryModel($this->comobj); 4 //$json = json_decode($this->req); 5 6 $param = json_decode($this->req['param'], true); 7//var_dump($param); 8 $result = $this->modelobj->downloadCheck($this, $param['dl_id'], $param['dl_day']); 9 $this->output = json_encode($result); 10 11 return 'JSON'; 12 }

lang

1function fileExistsSuccess(httpObj) 2{ clearShw(); // Confirmウィンドウを閉じる 3 var dl_day = $("dl_day").value; 4 var dl_id = $("dl_id").value; 5 6 if(dl_day==0 && dl_id == '' ){ 7 8 //SHWcfmobj.close(); 9 10 setCfmobjFailure('E0083'); // 対象データがありません。 11 return false; 12 } 13 14 // リターンパラメータチェック 15 var jsonRetVal = httpObj.responseText; 16 17 if(jsonRetVal == null){ 18 clearShw(); // Confirmウィンドウを閉じる 19 //SHWcfmobj.close(); 20 21 setCfmobjFailure('E0003'); // 処理が失敗しました 22 return false; 23 }else{ 24 var form = document.forms['form1']; 25 form.module.value = 'test'; 26 27 var p_action = "download"; 28 var p_base = '/abl/apedi.php'; 29 var url = p_base + '/test/' + p_action + "?dl_day="+dl_day+"&dl_id="+dl_id; 30 31 window.open(url, '_blank', COMDEF.DEF_WINDOW_OPTIONS); 32 33 form.module.value = "test"; 34 form.action.value = "list"; 35 form.submit(); 36 37 clearShw(); // Confirmウィンドウを閉じる 38 //SHWcfmobj.close(); 39 } 40}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2016/07/20 04:43

「出来ません」とは何がどう「出来ない」のでしょうか。少なくとも関数fileExistsSuccessがわからないとどうやってダウンロードを開始させようとしているかがわかりません。
nabex

2016/07/20 04:58

関数fileExistsSuccessを追加しました。ダウンロードボタンを押したときにCSVファイルをダウンロードできないという意味です。
guest

回答2

0

ベストアンサー

####最初に結論: PHPでダウンロードさせるのが良いと思います
ottooさんが書いたように、**PHPでダウンロードさせるのが良いと思います。**また、現在されている実装ではAjaxで取得した値をもう一度PHPに投げているので、少なくともそこは1手順で実装できると思います。

使用されているのは prototype.js でしょうか。最近のAjaxはネイティブの実装が各ブラウザで共通化されて来ているため、使わなくても実装できると思います。



####1: IZ00005 について

ダウンロードボタンを押すと'msgid':'IZ00005 と表示されるのですが、これはajaxの呼び出しに失敗しているということですか?

下記部分は関数com_getMsgを実行した結果を関数openLoadingWinの引数に実行したものを、onLoading に割り当てています。

JavaScript

1onLoading : openLoadingWin(com_getMsg({'msgid':'IZ00005', 'msglist':comMsg})), 2``` ロード時に関数を実行させたいのであれば、関数名を割り当てるか下記のように無名関数を使用します。 3```JavaScript 4onLoading : function() { openLoadingWin(com_getMsg({'msgid':'IZ00005', 'msglist':comMsg})); },

####2: 変数jsonRetVal が使われていない
関数fileExistsSuccess で変数jsonRetVal を準備しながらなにも使っていないので、どちらにせよ一つ目のPHPは意味はありません。

####3: window.open が無駄に呼ばれている

下記部分で新しいウィンドウを呼んでいますが、その前後のフォームとは無関係です。(値やフォームの新しいwindowとのやり取りが無い)ちなみにフォームもsubmitしてもデータを渡していないので(動いたとして)毎回同じ結果になります。

JavaScript

1window.open(url, '_blank', COMDEF.DEF_WINDOW_OPTIONS); 2``` 【window.open - Web API インターフェイス | MDN】 3[https://developer.mozilla.org/ja/docs/Web/API/window.open](https://developer.mozilla.org/ja/docs/Web/API/window.open) 4 5 6 7#####最近のファイルダウンロードの実装について 8`window.open` でのダウンロードは最近使われなくなっている気がします。(ブラウザによっては制限があるみたいです) 9 10最近の実装であれば、下記のような手法を取ると思います。 11 12【JavaScriptでファイルダウンロード処理を実現する - Qiita】 13[http://qiita.com/wadahiro/items/eb50ac6bbe2e18cf8813](http://qiita.com/wadahiro/items/eb50ac6bbe2e18cf8813) 14 15【javascript - JavaScriptからファイルをダウンロードさせるのはどうしたら良いですか? - スタック・オーバーフロー】 16[http://ja.stackoverflow.com/questions/300/javascriptからファイルをダウンロードさせるのはどうしたら良いですか](http://ja.stackoverflow.com/questions/300/javascript%E3%81%8B%E3%82%89%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%E3%81%95%E3%81%9B%E3%82%8B%E3%81%AE%E3%81%AF%E3%81%A9%E3%81%86%E3%81%97%E3%81%9F%E3%82%89%E8%89%AF%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B)

投稿2016/07/20 07:30

kei344

総合スコア69398

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nabex

2016/07/20 07:55

ありがとうございます。サイトを参考に自分で出来る部分までやってみます。それでもわからなかった場合は改めて質問させて頂きます。
guest

0

回答が意図と外れていたらすみません。
JSON(postJson)をリターンするのではなく、PHPでCSVダウンロードさせてしまえば良いのではないでしょうか?

投稿2016/07/20 04:20

ottoo

総合スコア84

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nabex

2016/07/20 04:26

ありがとうございます。やり方は色々あるので柔軟に考えたほうが良いというのも確かにありますね。ですがこちらの都合でなんとかこのバグを解消したいです。 調べていたら以下のサイトが参考になりそうなので自分でももちろん良く見てみます。 http://tricky-code.net/mine/javascript/js02ajax.php
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問