- ベストアンサー
$.postとPerlのデータ受け渡しについて
現在、 $.postを使ってPerlにリクエストを送り、帰ってきた値を表示するという事をしたいのですが、Internal Serverエラーとなりますが、どこにエラーがあるのかがわからない状態です。 実行権限などは与えています。 以下に書いたプログラムを貼りますので、間違いがありましたら是非教えていただきたいです。 HTML index.html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Test Page</title> <script type="text/javascript" src="../lib/jquery/jquery-1.3.2.js"></script> <script type="text/javascript" src="./JS/test.js"></script> </head> <body> <form id="form01"> <input type="text" name="title" id="title01" value="post"><br> <input type="button" value="post" onClick="getValue()"> </form> <div id="res_title"></div> </body> </html> JavaScript test.js function getValue(){ //フォームのデータ取得 var pos_title = $('#title01').attr('value'); //var comment = $('#comment').attr('value'); //フォームデータのPOST送信+コールバック $.post("./cgi-bin/post.pl", {"title" : pos_title}, disp); } function disp(data){ $('div#res_title').html(data); } Perl post.pl #!/usr/bin/perl -w use strict; use warnings; my $formdata; if ($ENV{'REQUEST_METHOD'} eq "GET") { $formdata = $ENV{'QUERY_STRING'}; } else { read(STDIN, $formdata, $ENV{'CONTENT_LENGTH'}); } return $formdata;
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
return ではなく print が正解です。 #!/usr/bin/perl use strict; use warnings; use CGI; use CGI::Carp qw(fatalsToBrowser); # traceback my $q = CGI->new; print $q->header( -type => 'text/plain', -charset => 'UTF-8' ); print $q->param('title'), "\n"; #1さんの通り、text/htmlで出力してJS側でHTMLをパースするという方法も一般的です。 fatalsToBrowserを付けておけば、Internal Server Errorの代わりにエラーメッセージを表示してくれます。もちろんCGIスクリプト自体が実行できればの話ですが。
その他の回答 (1)
- g_p_
- ベストアンサー率53% (28/52)
こんにちは、 >#!/usr/bin/perl -w > >use strict; >use warnings; > >my $formdata; >if ($ENV{'REQUEST_METHOD'} eq "GET") { >$formdata = $ENV{'QUERY_STRING'}; >} >else { >read(STDIN, $formdata, $ENV{'CONTENT_LENGTH'}); >} >return $formdata; 原因は別かも知れないので、自身はないですが、 サーバーサイドで何も出力されていない様子なので、 とりあえずレスポンスヘッダと何かしらを出力してみてはどうでしょうか。 #!/usr/bin/perl use strict; use warnings; use CGI; use Data::Dumper; my $q = CGI->new(); print $q->header('text/plain') , Dumper {$q->Vars};
お礼
返信が遅くなり大変申し訳ございません。 アドバイス有難うございます。 仰られた通りサーバサイドで何も出力されていないようです。 具体的なコードも付けていただき大変為になります。 教えてくださった内容を早速試してみます。 有難うございます。
お礼
回答有難うございます。 具体的なコード、その他のアドバイス大変為になります。 CGI自体は実行できる事は確認しております。 早速実行に移りたいと思います。 有難うございます。