リンクをクリックした際に、フォーム送信したい

[新着] Webテンプレートを仮オープンしました



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>




質問の仕方についても、今後は気をつけるようにします。
今後もよろしくお願いします!


一覧へ戻る