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

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

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

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

CGI

CGI(Common Gateway Interface)とは、Webサーバー上でユーザプログラム動作させる仕組みのこと。また、動かす前提のプログラムをCGIと呼ぶこともあります。HTMLなどの静的な情報に限らず、プログラムの処理結果をベースにした動的情報の提供が可能です。

ダウンロード

リモートシステムからローカルシステムへとデータを受信する事、もしくはそのようなデータ転送を行う事をダウンロードと呼びます。

JavaScript

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

Ajax

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

Q&A

2回答

2210閲覧

JSのajaxにてCGIの呼び出しを行う

uuuk0603

総合スコア12

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

CGI

CGI(Common Gateway Interface)とは、Webサーバー上でユーザプログラム動作させる仕組みのこと。また、動かす前提のプログラムをCGIと呼ぶこともあります。HTMLなどの静的な情報に限らず、プログラムの処理結果をベースにした動的情報の提供が可能です。

ダウンロード

リモートシステムからローカルシステムへとデータを受信する事、もしくはそのようなデータ転送を行う事をダウンロードと呼びます。

JavaScript

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

Ajax

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

0グッド

1クリップ

投稿2019/06/22 08:02

前提・実現したいこと

お世話になります。
プログラミング初心者のため至らない点が多々あると思いますが
よろしくお願いいたします。

現在、JSからCGI(Perl)を呼び出し、配列を返したのち(試しのため中身はなんでも良い)
戻ってきた配列をテキストファイルでダウンロードしたいと考えております。
流れとしては、
①テキストボックスとダウンロードボタンを作成
②ダウンロードボタン押下でテキストボックスの値を受け取り、AjaxのurlにてCGIをける
③返ってきた配列データをテキスト形式でダウンロードする

まだこのやりかたでいけるのか調査段階です。
そこで質問なのですが、CGIからの返す値(配列)はどのように設定するのでしょうか?
return的な何かがあるのでしょうか。
どのように返す配列をセットするのかがイメージできず、困っております。
初歩的な質問でしたら申し訳ございません。

また、環境はWindowsで10で行っております。
特に何もインストールしておらず、JSはhtml拡張子で動かしております。
これ自体にも問題はありますでしょうか?

以上、ご回答いただければ幸いです。

該当のソースコード

test.html

.....(省略) <script> /*ダウンロードボタン押下時の処理 onclick属性で設定されている*/ function download(){ downloadDataGet().done(function(result){ if(result == ""){ alert("データがありません。"); return false; }   var tempArray = retult.split(","); //データがなければ終了 if(!tempArray){ alert("データがありません。"); return false; } //↓データがあった場合、ここでファイルを生成する予定   //現在データがとれないため、処理がかけておりません }).fail(function(result){ alert("データを取得できませんでした"); } } /*ダウンロードファイルを取得する*/ function downloadDataGet(){ return j$.ajax({ type:'GET', dataType:'text', timeout:10000,//仮 data:{ start_time:start_time //テキストボックスの値 }, url:(CGIまでのファイルパス)+'test.cgi' }) } </script> ......(省略)

test.cgi

...(省略) #パラメータ取得 our $q = CGI->new; our $S_TIME = $q->param('start_time'); #本来はこのしたに該当の日付(取得したパラメータ)のデータを #取得するコマンドを実行するのですが今回は適当な配列を作成して返したいと思っています。 binmode STDIN, ':encoding(cp932)'; binmode STDOUT, ':encoding(cp932)'; binmode STDERR, ':encoding(cp932)'; my ($var1, $var2, $var3); ($var1, $var2, $var3) = ("月曜", "火曜", "水曜");

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

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

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

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

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

guest

回答2

0

CGIだろうと静的なHTMLファイルだろうと、URLを介してデータを受け取る手順は同じです。
あとは、処理がしやすいように考慮したデータを返すようにCGIを作りこめばいいわけです。JSONとかを返すようにすれば楽な気がします。

投稿2019/06/22 09:47

KojiDoi

総合スコア13671

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

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

0

CGIは標準入出力を使ってデータをやりとりするので、Perlから見れば単純にprintで出力するだけです。但し、先にHTTPヘッダを出力するためにheaderメソッドの結果をprintする必要があります(オプションは必要に応じて調整してください)。

perl

1#! /usr/bin/perl 2use CGI; 3 4my $q = CGI->new; 5 6print $q->header(-type=>'text/plain', -charset=>'utf-8'); 7 8print "x,y,z\n";

ちなみにJS側の

javascript

1  var tempArray = retult.split(",");

retultはスペルミスだと思います。

投稿2019/06/23 08:15

harrek

総合スコア123

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問