WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:cgiの部品としての出力の失敗

0:[投稿] retu [2006/11/17 02:43 ] [環境:ie6 perl5.8.3]

ども。お久しぶりです。わからないことがあるので教えてください。
perlで作ったプログラムをホームページの一部品として出力したいと考えています。
そこで以下のように出力させているのですが何も表示されません。何がいけないのでしょうか。

@ページ側
<html>
<body>
<script src="my.cgi"></script>
</body>
</html>

Acgi側
use CGI qw(:standard);
$q = new CGI;
$stag='<p>';
$ltag='</p>';
$tag=$stag.'konbanwa'.$ltag;
print "Content-type: text/html\n\n";
print <<"EOM";
$tag
EOM

exit;


1:[回答] ミツ [2006/11/17 11:34 ]

現状でやろうとしている事は…

<script src="my.html"></script>
my.htmlの中身
<p>konbanwa</p>

と、等価です。

(1)my.cgiは外部javascritptのように振る舞い、
(2)javascriptとして実行可能なコードを吐かなければいけません。


print "Content-type: application/x-javascript\n\n"; # ←(1)
print <<"EOM";
document.write('$tag'); # ←(2)
EOM

※単純に書きましたが $tag を出力するあたりはその内容によってはjavascriptエラーになりますから工夫が要るかもしれません。

もしくは、SSIを使うべきです。


2:[回答] retu [2006/11/17 14:06 ]

即答ありがとうございました。
SSIに関してはあまり詳しくないのでまだ試していませんが、
以下のソースで試してみたところ同じエラーの[文字が正しくありません]が出て何がいけないのかわからなくなっています。アドバイスを願います。
@html側
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>グラフィカル時計</title>
</head>
<body>
<h1>グラフィカル時計</h1>
<script src="./sample26-2.cgi"></script>
</body>
</html>

ACGI側
#! c:\perl\bin\perl.exe
use CGI qw(:standard);
$q = new CGI;
print "Content-type: text/html; charset=Shift_JIS\n\n";
print <<"EOF";
document.write("<table><td>こんばんわ</td></table>");
EOF

exit;


3:[回答] みすず [2006/11/18 11:42 ]

use CGI qw(:standard);
$q = new CGI;
というところが間違っているとおもいます。
それを抜いて自分の環境でやるとできました。
また、Content-type; text/javascriptにかえといたほうがいいかと。(念のため)


4:[回答] AC1号 [2006/11/18 13:57 ]

>>3
>use CGI qw(:standard);
>$q = new CGI;
>というところが間違っているとおもいます。
いえ、間違っていませんが。これでエラーが出るのであれば、単にあなたの環境にCGI.pmがないだけかと。
とはいえ、>>2を見る限りCGI.pmは使ってないようなので、削除しても問題ないはずです。

>また、Content-type; text/javascriptにかえといたほうがいいかと。(念のため)
念のため、というよりはこっちの方が重要です。
print "Content-type: text/javascript\n\n";
です。(>>3の;はtypoでしょう)


5:[回答] retu [2006/11/18 18:23 ]

アドバイスありがうございます。
以下のようにしてみたらローカル環境では動きました。
しかし、<script src="http://127.0.0.1/my_cgi/txt_link_send.cgi
の部分を別環境のアドレスにするとできません。
aaacafeを使っているのですが何故だかわかりません。
単独で動かすと動くのですが出力をhtmlに流すとうまくいきません。アドバイスをいただきたいです。

@cgi
表示部分だけ。$txtdataにはランダムで顔文字とメッセージが入る
print "Content-Type: text/html\n\n";
print "var txtlink            =\"$txtdata\";\n";

Ahtml
<html>
<head>
<script src="http://127.0.0.1/my_cgi/txt_link_send.cgi"></script>
<script language='Javascript1.3' charset='Shift_JIS'>
function input(){
str=txtlink;
test.document.write('<marquee>' + str + '</marquee>');
}
</script>
</script>
</head>
<body onload="input()">
<div id=test></div>
</body>
</html>


6:[回答] ミツ [2006/11/18 19:04 ]

Content-Typeを修正しましょう。

単体だとうまく動くって、IEで画面上に
var txtlink = "〜〜〜";
と表示されたらそれはjavascriptファイルとして認識されていない証拠であって正常な動作ではありません。
Content-Typeを修正してそれがjavascriptファイルとして認識されたなら、開く/保存/キャンセル ってダイロアログが出て正解です。
(保存してみて内容が期待した通りになっているか確認します。)


>3,>4
text/javascriptでは動作しないブラウザなどもあるようなのでHTTPヘッダ上はapplication/x-javascriptにしておいた方が無難のようです。
http://web50.net/qa/technical.html#t18
http://yupotan.sppd.ne.jp/web/script-mime.html


7:[回答] retu [2006/11/19 09:52 ]

ミツさん他回答をいただいてありがとうございました。
無事稼動しました。大変感謝します。
ご指摘のとおりでした。Content-Typeに問題がありました。
これ以後も精進していきますのでまた別の機会にもお願いしたいと思っています。

回答(必須): 状態:

お名前(必須):

URL:




[戻る]