MW211 EXIT

devlog
JavaScript/POSTメソッドとGETメソッドを切り替える方法
2011年09月27日
formタグはネストすることができない。
┌──────────────────────────────────────┐
│<form method="post" action="xxxx.php">                                      │
│  <form method="get" action="oooo.php">                                     │
│    <input type="submit" value="GET実行"/>                                  │
│  </form>                                                                   │
│  <input type="submit" value="POST実行"/>                                   │
│</form>                                                                     │
└──────────────────────────────────────┘
だから、上記みたいにPOSTしたい範囲の中にGETしたい範囲があるなんてのは無理。
さて、どうしよう。
ということで、まずはgetのsubmitボタンをJavaScript化して
POSTメソッドのformなのに、GETメソッドとしてsubmitさせるという方法。

まずはformのネストを潔くあきらめて、submitボタンをただのボタンにして
JavaScriptに後を託す。
┌──────────────────────────────────────┐
│<form method="post" action="xxxx.php">                                      │
│  <input type="button" value="GET実行" onclick="submit2(this.form)"/>       │
│  <input type="submit" value="POST実行"/>                                   │
│</form>                                                                     │
└──────────────────────────────────────┘
で、JavaScriptの中でこんな感じで内容を書き換えてsubmitさせてしまうのだ。
┌──────────────────────────────────────┐
│<script type="text/javascript">                                             │
│function submit2(inForm){                                                   │
│  inForm.setAttribute("method","get");                                      │
│  inForm.setAttribute("action","oooo.php");                                 │
│  inForm.submit();                                                          │
│}                                                                           │
│</script>                                                                   │
└──────────────────────────────────────┘

これは、POSTとGETが(立場が)逆の場合も可。
というか、そっちの方がおすすめ。
なぜなら大抵、POSTする内容は量が多いので、GET化(URI化)すると
URIがものすごい長文になってしまい、あまり実用的ではない。
#IE7だと「res://ieframe.dll/dnserror.htm」エラーとかになる。

ということで、明日につづく。
分類:JavaScript