アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在、 $.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;

A 回答 (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スクリプト自体が実行できればの話ですが。
    • good
    • 0
この回答へのお礼

回答有難うございます。
具体的なコード、その他のアドバイス大変為になります。
CGI自体は実行できる事は確認しております。
早速実行に移りたいと思います。
有難うございます。

お礼日時:2009/06/03 18:30

こんにちは、



>#!/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};
    • good
    • 0
この回答へのお礼

返信が遅くなり大変申し訳ございません。
アドバイス有難うございます。
仰られた通りサーバサイドで何も出力されていないようです。
具体的なコードも付けていただき大変為になります。
教えてくださった内容を早速試してみます。
有難うございます。

お礼日時:2009/06/03 18:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!