リンクをクリックした際に、フォーム送信したい
-
0 名前: BLUE : 2006/06/01(木) 20:10
- 度々、恐れ入ります。
下記について教えてください。
HTMLファイル上のリンクタグをクリックした際に、
そのリンク先HTMLファイルにフォームでデータを送信したいです。
送信するデータは、hiddenのデータで、POSTで送信したいと思っています。
また、各HTMLファイルには通常のフォームも使用したいので、
全てのリンクををフォームタグでくくることは避けたいと思っています。
このようなことをJavaScriptで実現することは可能でしょうか?
-
1 名前: Pid ◆byEkK9OALr : 2006/06/01(木) 20:10
- 可能かと問われれば可能だと答えるしかありませんが,どういう方法があるかについては,form 要素がどういう構造で,アンカーがどこにあって,どういうときにどのデータを送るのか,どのデータは送りたくないのかによります。
究極的には XMLHttpRequest でどこのデータでも POST できます。
-
2 名前: BLUE : 2006/06/01(木) 20:10
- Pidさま
返信ありがとうございます。
XMLHttpRequestの存在を初めて知りました・・。
要望としては、普通のWEBページ上にある全てのリンク(同一ドメイン内のみ)を
クリックしたときに、リンク先URLにhiddenのデータをPOSTで送信したいのです。
> form要素がどういう構造で
構造というと、POSTで、という回答しか思いつかないのですが。。
> どういうときにどのデータを送るのか、
リンク文字をクリックしたときに、リンク先にhiddenの指定したname属性のものだけを送付したいです。
> どのデータは送りたくないのか
基本的に、hidden以外のデータは送りたくないです。
上記で情報は足りるでしょうか?
再度、よろしくお願いします。
-
3 名前: Pid ◆byEkK9OALr : 2006/06/01(木) 20:10
- > クリックしたときに、リンク先URLにhiddenのデータをPOSTで送信したい
その hidden データはどこにあって,リンクしたときには同じデータを参照するのでしょうか。それともリンクごとに異なるデータを参照するのでしょうか。
また,これは特定場所でのシステムでしょうか。それとも WWW で不特定多数の利用を考えているのでしょうか(だとすれば,利用者の意思を確認しない POST はどうかと思いますが)。
申し訳ないのですが,現時点では前提条件が漠然とし過ぎていて,どう回答して良いか分かりません。「こういう場所で使う,こういう仕組みを考えており,このように組んでみたけど,この部分がうまくいかない,本当はこうなってほしい」のように,実際のソースコードと一緒に提示して頂ければ,具体的な話になると思います。
可能・不可能の判断だけで良いなら「可能」ですので,頑張って下さい。目的・状況によっては,別に XMLHttpRequest を使わずとも,formObject.method = 'post'; formObject.submit (); で十分でしょう。
-
4 名前: Z ◆XTzyosZXcL : 2006/06/01(木) 20:10 ID:7f4VEd9L
- WWW上での利用については、下記資料のようなことも指摘されていますからご注意ください。
http://www.ipa.go.jp/security/awareness/vendor/programming/a01_05_main.html
個人的にはセキュリティ関係の資料でしたら下記がお奨めです(専門的な内容になりますが)。
http://takagi-hiromitsu.jp/diary/
-
5 名前: Pid ◆byEkK9OALr : 2006/06/01(木) 20:10
- たとえば,
・<p><a href="sample1.cgi">フォーム送信</a><input type="hidden" name="n1" value="v1" />したい。</p>
のように,form 要素外に hidden データを埋め込むことも文法上可能です。あとは click イベント発生時に,
・空っぽの form 要素を用意し,form.action を a.href に変更
・a 要素の隣にある input 要素を form 要素内にコピー
・form.submit()
なんて方法もあるでしょう。いやいや空っぽの form 要素なんて面倒,ということなら XMLHttpRequest でもどうぞ(流行ですので,例文はたくさん見つかるはずです)。
と言いますか,利用者が入力するのではない固定データなら,
・<p><a href="sample1.cgi?n1=v1">フォーム送信?</a>したい。</p>
で十分だと思います。どうせ hidden データなんて隠しようがありませんし(遷移後の URI 表示が気になるなら,遷移前にクエリを削っておけば良いでしょう)。
-
6 名前: BLUE : 2006/06/01(木) 20:10
- Z様
セキュリティについてのご指摘ありがとうございます。
いただいたURLはとても参考になります。
ただ、今回はhiddenを使用する際のセキュリティについては重要視しておりません。
hiddenを使用したいというのは、WEB画面上に見せたくないだけで、ユーザーに見られても特に問題のないデータです。
ユーザーごとに異なるデータでもありませんし、HTMLファイルのソースを確認すれば分かるデータをhiddenで送付したいと思っております。
他にもお気づきになった点があったら、ご助言お願いします!
-
7 名前: BLUE : 2006/06/01(木) 20:10
- Pid様
度々、返信いただきありがとうございます。
> 空っぽの form 要素を用意し,form.action を a.href に変更
> a 要素の隣にある input 要素を form 要素内にコピー
> form.submit()
このあたりを参考にJavaScriptで実現することができました。
調べてみましたが、XMLHttpRequestはちょっと敷居が高そうだったので・・・。
ヒントをいただき本当にありがとうございました。
簡略化すると下記のような形です。
<script language="JavaScript">
<!--
function doSubmit(send){
document.testform.action = send;
document.testform.submit();
}
// -->
</script>
<form name="testform" method="post">
<input type="hidden" name="name" value="データ">
</form>
<a href="javascript:doSubmit(test1.html)">リンク1</a>
質問の仕方についても、今後は気をつけるようにします。
今後もよろしくお願いします!