CGIで出力したHTMLの中にJavaScript
[上に]
[前に]
[次に]
MOE
2000/02/24(木) 15:58:41
もしかしたら、基本的なことなのかもしれませんが・・・。
CGIプログラムの中で記述したHTMLの中にJavaScriptを記述すると
スクリプトエラーが出てしまうのですが、CGIプログラムの中にJavaScriptって問題あるんでしょうか。
ちなみに、普通のHTMLに同じJavaScriptのソースを書くと問題なく処理されますので、ソースに問題はありません。
どなたか、ご教授お願いします。
やっちゃん
2000/02/24(木) 16:13:42
エスケープするべき文字をしていないのかもしれません。
エラー:print"document.write("あいうえお");\n";
大丈夫:print"document\.write\(\"あいうえお\"\)\;\n";
Javascriptだからエラーというのはないと思います。
チャペル
2000/02/24(木) 16:14:49
こんにちわです。
文字コードなどの兼ね合いでエラーが出てるのかも・・・。
解決法というか、回避法として、
外部JavaScriptファイルを使うというのはどうでしょう?
(これでも、エラーが出たりして。)
EMI
2000/02/24(木) 16:27:00
おそらく、やっちゃんさんの言うとおりエスケープの問題でしょう。
ただ、少々エスケープしすぎな気が。
シングルクォートを使えば、たぶん大丈夫でしょう。
print 'document.write("あいうえお");'."\n";
MOE
2000/02/24(木) 18:13:08
レスありがとうございます。
エスケープの問題と言うことなのですが、皆さんの指摘のような
printなどでJavaScriptからかき出しているわけではないのです。
以下が私の書いたソースです。何か問題あるのでしょうか。
JavaScriptは初心者中の初心者なので・・・(恥)
function go() {
var svc = "test.cgi";
svc = svc + "?" + document.divselect.elements[0].name + "=" + document.divselect.div.options[document.divselect.div.selectedIndex].value;
location.href = svc;
}
これと全く同じソースをHTMLに書いて実行しても、エラーは出ません。
フォームの名前なども全く同じ物です。
本来なら、ページを見ていただきたいのですが、仕事上の都合で見ていただくことが出来ません。すみません。
やりたいこととしては、<SELECT>で選択された値を指定したCGIへ渡し、
CGIはその値で処理を行ない、その結果をHTMLとして表示する。
ここまでは、上手く行くのですが・・・。
結果を表示したHTMLからもう一度<SELECT>で選択すると、エラーになります。
エラーは[document.divselect.div.optionsはオプションではありません]とでています。
非常にわかりづらい説明かもしれませんが、お願いします。
MOE
2000/02/24(木) 18:23:53
あ・・・・。
すみません。すごく見当違いな返事をしてしましました(恥)
皆さんの言ってるエスケープの問題の気がします。
私は、HTMLのソースをCGIの中で<<"HTML";のような形でまとめて書いているので、
printを違う意味でとってしまいました。
皆さんの言ってるprintは、HTML内にJavaScriptを書き出すprintのことですよね。
まずは、エスケープで対処してみます。
あぁ、恥ずかしい・・・。
EMI
2000/02/24(木) 18:25:48
なるほど。ならば、
print <<'HTML';
〜
HTML
の様にすれば、たぶんうまくいくと思います。
MOE
2000/02/24(木) 18:40:00
うーん、やっぱりだめですねぇ(TT)
>[document.divselect.div.optionsはオプションではありません]
と言われてしまいます。
ちゃんと、divselectと言うフォーム名もつけてますし、divと言う<SELECT>もあります。
どうしてなのでしょうか・・・・。
EMI
2000/02/24(木) 18:53:56
divという要素があるから、というのは関係あるんでしょうか?
名前を変えてみると、もしかしたらうまくいくかもしれません。
MOE
2000/02/25(金) 10:02:00
おはようございます。
EMIさんの言う通り、divと言う名前を変えてみました。
期待した通りの結果が返ってきました(^0^)
が、なぜdivと言う名前だとエラーになるのかがわかりません。
すみませんが、ご説明いただけないでしょうか。
お願いします。
EMI
2000/02/25(金) 11:31:01
HTMLにdivという名前の要素があるからです。
つまり、divと指定したことにより、divという名前のコントロールではなくどこかにあるdiv要素(idがoptionsのもの?)を探しに行っているのが誤動作の原因です。たぶん。
だから、おそらくこのJavaScriptは次のようなものを探してるのでしょう。たぶん。
<div id="options">
〜
</div>
Syn
[E-Mail]
2000/02/25(金) 11:40:01
> [document.divselect.div.optionsはオプションではありません]
わたしも少し前に似たようなエラーで悩みました。
このテのエラーを避けるために、
document.forms("divselect").elements("div").options
としたほうがブナンかもしれません。
EMI
2000/02/25(金) 11:43:36
>> [document.divselect.div.optionsはオプションではありません]
>
>わたしも少し前に似たようなエラーで悩みました。
あぁ、そうか。エラーが出るんでしたっけ。
よく読みとってませんでした、すみません。
つまり、div要素にoptionはないといっているのでしょう。
MOE
2000/02/25(金) 11:52:46
なるほど。
確かにHTMLに<DIV>がありますよね。それでですか・・・。納得。
しかし、まだ疑問が・・・。
同じdivと言う名前を使っているのに、ただのHTMLではエラーが出ないのって何ででしょうか。
Synさんの書かれているように
>document.forms("divselect").elements("div").options
としてみました。
[document.forms(...).elements(...).optionsはオブジェクトではありません]
と言われました。
う〜ん。JavaScriptは難しい・・・(TT)
MOE
2000/02/25(金) 11:59:21
何度もすみません。
先ほどエラーになると書きましたが、ただのHTMLではエラーになりませんでした。
CGIで出力しているもののみです。
文字括りは前にEMIさんに指摘していただいた通り、
<<'HTML';にしています。
MOE
2000/02/28(月) 10:28:33
[[解決]]
もう少し、自分で勉強してみます。
EMIさん、Synさん、ありがとうございました。
[上に]
[前に]
[次に]