• 締切済み

Perl内でのフレームリンク

始めまして、こんばんは。 早速ですが本題に入ります。 Perlでのフレームリンクなのですが 画面を三分割(Main(左),Menu(右),Out(下))とし MenuフレームからFormでMainとOutフレームにリンクさせたいのですが なかなか思うように行きません。 ここの過去ログにも似たような内容があったのですが 応用しても不可能だったり、Googleで検索してもなかったりと 努力はさせていただきました。 MenuのFormで送る内容なのですが Mainへは ・./main.cgi ・input hidden name=mode value=Main Outへは ・./out.cgi ・input hidden name=mode value=messege となります。 どうぞ、よろしくお願い致します。

みんなの回答

回答No.4

ステータスコード505ということは、method=postとURLの後ろにデータを付けて送る同時送信を、サーバーが対応してないか禁止してるってことかな? 当方のテスト環境(Apache2.0系)で試してみると、 IE7、Fx2、Sf3では、厳密には関数の中にいる間は「送信待機」状態になっていて、 関数を抜けた時に初めてsubmit()が実行されるようです。 IE7、Fx2では両方main.cgiにアクセスし、 Sf3は2つ目のform.submit()しか実行していないようです。 1つのフォームで同時に2カ所に送信するのが無理なのかも知れません。 ブラウザによっては特殊な送信方法を使って、ステータスコード505が返るかもしれません。 やはり隠しフォームを用意して、データをコピーしてそれぞれ送信する、という方法でないとダメだと思います。 forループでform.elements[ ] を順番にたどればコピーできると思います。 それからもしCGIモジュール(CGI.pm)を使われている場合は、 GETかPOSTのいずれかからしかデータを取得できません。 もしSTDIN(method=POST)と環境変数"QUERY_STRING"(method=GET)の両方のデータを取りたい場合は、オリジナルの取得ルーチンを作るか、それに対応したモジュールやライブラリを使わなければなりません。

  • pick52
  • ベストアンサー率35% (166/466)
回答No.3

他のウィンドウのURLを変更するには window.location.href = 'URL'; のようにします(GETメソッド限定)。 ただし、非ASCII文字列などが含まれている場合、JavaScript標準では UTF-8かUnicode以外のエンコードでURLエンコードできませんでの 注意が必要です。 // JavaScript function sendForm() { var formElem = document.forms['form']; var action = [ './main.cgi?mode=main' ]; for(var i = 0; i < formElem.length; i++) { action.push(encodeURIComponent(formElem[i].value)); } left.location.href = action.join('&'); action[0] = './main.cgi?mode=menu'; out.location.href = action.join('&'); return false; } <!-- HTML --> <form name='form'> <td align="center" class="b2"> <input type="hidden" name="cmd" value="next"> <input type="hidden" name="id" value="$id"> <input type="hidden" name="data" value="$data"> <input type="submit" class="btn" value="次へ" onclick="return sendForm();"> </td> </form> POST送信する方法は...、Ajax使うとかかな。

参考URL:
http://www.tohoho-web.com/js/location.htm#href
回答No.2

連続失礼します。 ここはJavaScriptのカテゴリーなので、JavaScriptの質問と思いますが、 データを送るときのJavaScriptも合わせて補足回答お願いします。 Perlの質問ならPerlのカテゴリーで、CGIの処理ならCGIカテゴリーで、HTMLの質問ならHTMLのカテゴリーで質問されるのがいいと思います。

VerHIZAKI
質問者

補足

補足させていただきます。 >データを送るときのJavaScriptも合わせて補足回答お願いします。 Formで別フレームへデータを送る際 <form action="./main.cgi" method="post" target="left"> <td align="center" class="b2"> <input type=hidden name=mode value=main> <input type="hidden" name="id" value="$id"> <input type="hidden" name="data" value="$data"> <input type=submit class=btn value="メイン"> </td> </form> とすれば、メインボタンをおせばフレームleftへのリンクとなります。 しかし、私がやりたいことは 1つのリンクで2つのフレームを同時にリンクするというものです。 出力HTMLは スクリプト内のサブルーチンを呼び出して出力する形で ./main,cgi mode=main とすると main.cgi内のmainというサブルーチンを呼び出す仕組みになっています。 <script language="JavaScript"> <!-- function sendForm() { var formElem = document.forms["form"]; formElem.action = "./main.cgi?mode=main"; formElem.target = "left"; formElem.method = "post"; formElem.submit(); formElem.action = "menu.cgi?mode=menu"; formElem.target = "out"; formElem.method = "post"; formElem.submit(); return false; } // --> </script> <form name='form' onsubmit='return sendForm()'> <td align="center" class="b2"> <input type=hidden name=cmd value=next> <input type="hidden" name="id" value="$id"> <input type="hidden" name="data" value="$data"> <input type=submit class=btn value="次へ"> </td> </form> という感じにしてみましたが modeが送られず、505エラーが表示。 (404の場合はURLのミスなので、modeのエラーと断定しています) >Perlの質問ならPerlのカテゴリーで、CGIの処理ならCGIカテゴリーで、HTMLの質問ならHTMLのカテゴリーで質問されるのがいいと思います。 この質問をする際、Perlかと思ったのですが 現在、質問をしている言語がJavascriptなので こちらにかかせて頂きました。 他に補足不足などございましたら言ってください。 よろしくお願いします。

回答No.1

どんなHTMLを出力しているのですか?

関連するQ&A