マンガでよめる痔のこと・薬のこと

いろいろ検索したのですが、それらしきものが無いように思うので、
陳腐な質問をしているかもしれませんが、よろしくお願いいたします。


●質問1、

現在、下記の「■例1、」のようにページが開いた時点で

自動でクリックしてフォームデータを送信できるようにしています。


■例11、

<html>
<body>
<form name="nform" action="a.php" target="blank" method="POST">
<input type="hidden" value="a" name="1">
<input type="hidden" value="b" name="2">
<input type="hidden" value="c" name="3">
<SCRIPT language="JavaScript">document.nform.submit();</SCRIPT>
</form>
</body>
</html>


この同じページに、下記のような全く違うaction先に、内容の一部だけ違う別のフォームを書いて、

同じように自動クリックしてデータを送る方法はありますでしょうか?

出来れば、2つだけではなく、複数のフォームを配置したいのですが・・・


<html>
<body>
<form name="nform2" action="b.php" target="blank" method="POST"> →※ここの action=値が違う。
<input type="hidden" value="a" name="1">
<input type="hidden" value="b" name="2">
<input type="hidden" value="f" name="3"> →※ここの value=値だけが違う。
</form>
</body>
</html>


色々試しておりますが、ほとんど素人のためいまだに苦戦しております。



●質問2、

また、このやり方では無事に2つに送信できたとしても、target="blank"で2つのページが開いてしまうと思うのですが、

それを防ぐ方法(ひとつだけ開く)などはありますでしょうか。


JavaScriptはoffにしてないという条件下で動かす方法を考えております。

素人発想で申し訳ありませんが、何か解決法がありましたらよろしくお願いいたします。

A 回答 (4件)

<form action=a target=samename> ... </form> <!-- ひとつだけ開くため target を同じ名前にする -->


<form action=b target=samename> ... </form>
<form action=c target=samename> ... </form>

<script>
function listener(){
var fs = document.forms;
for (var i=0; i < fs.length; i++) { // 複数フォームすべてを対象
fs[i].submit();
}
}
addEventListener('DOMContentLoaded', listener, false);
</script>

補足
* 複数フォーム送信しても一つだけ開く場合は、最後のフォームについてのみ表示されます。
* 自動 submit で別画面表示を行うと、ブラウザによっては警告表示されますので注意してください。
* 送信後の画面を開く必要が無いなら、フォーム内容を AJAX 送信するのが定番
    • good
    • 0
この回答へのお礼

私のやりたいことを組んでいただいた上に、コードの記載まで頂き、ありがとうございます。

一度、テストさせていただきます。

ちなみに、大変、恐れ入りますが、このコードの実際の使い方は下記のような記載方法でよろしいのでしょうか?

本当に素人で申し訳ありませんが、お教えいただけましたらありがたく思います。

よろしくお願いいたします


※action=の部分は仮定のURLに変更しております。

<html>
<body>

<script>
function listener(){
var fs = document.forms;
for (var i=0; i < fs.length; i++) { // 複数フォームすべてを対象
fs[i].submit();
}
}
addEventListener('DOMContentLoaded', listener, false);
</script>

<form name="nform" method="POST" action="https://EEE.com/aaa/regist.php" target="_blank>
<input name="direct_reg_code" type="HIDDEN" value="no1" />
<input name="email" type="HIDDEN" value="[[email]]" />
<input name="days" type="HIDDEN" value="30" />
</form>

<form name="nform2" method="POST" action="https://EEE.com/bbb/regist.php" target="_blank>
<input name="direct_reg_code" type="HIDDEN" value="no2" />
<input name="email" type="HIDDEN" value="[[email]]" />
<input name="days" type="HIDDEN" value="20" />
</form>

</body>
</html>

このような記載でよろしいでしょうか。

よろしくお願いいたします

お礼日時:2017/11/29 19:26

No.3 のお礼の補足



すべての要素 form の属性 target に、特殊キーワード以外で独自の名前を付けてください。
参考
https://developer.mozilla.org/ja/docs/Web/HTML/E …

ブラウザは target という名前が付いた画面(ウィンドウ or タブ)が、
無ければ新しく画面を開き (1回目のsubmit)
有るなら画面を上書きします (2回目以降のsubmit)

余談

画面(ウィンドウ or タブ)ではなく iframe に表示するのも手です

さらに余談

昨今の流行では別画面を開くのは悪手とされていますので、
やはり AJAX によるフォーム内容のみ送信する方法を強くお勧めします
参考
https://www.google.co.jp/search?q=jquery+ajax+fo …
    • good
    • 0
この回答へのお礼

リンクまで貼って頂きありがとうございます。

本当は別ページを開かなくても全く問題はないのですが、

私自身の勉強不足にて「AJAX によるフォーム内容のみ送信する方法」が

全く理解できていない状態でございます。申し訳ございません。

まず、お教えいただきました方法を試させていただきたく思います。

ご配慮いただきまして、本当にありがとうございます。

テストが完了次第、うまく動いたかどうかのご報告をさせていただきます。

感謝します。

お礼日時:2017/11/29 20:59

やろうとしていることは、ページを開いてもどって別ページを開くことですから


それは無理。

teratailにもマルチしているようですが、とりあえず送ったあとの結果をみる
必要がないならajaxで処理するのがよいでしょうし、
そうでなければblankで開いてあとから閉じるとか、iframeで対応するとか
やりようはありますが、所詮姑息な手段です

そもそも複数におくるという発想自体がまちがいです
    • good
    • 0

こんにちは



お求めの回答ではないと思いますが・・・


>現在、下記の「■例1、」のようにページが開いた時点で
>自動でクリックしてフォームデータを送信できるようにしています。
・・・ということは、最初のページを開く処理そのものが無駄で、ユーザにとっては最初に何かが表示されるまでの待ち時間を無駄に浪費されているということになります。
hiddenの固定値を送っているだけのようなので、一往復分の通信の意味がないですね。
最初のリクエストに対して、submit後の結果を触接返すようにしておけば、無駄な送受信は無くなるし、ユーザにとっても快適になるものと想像します。

>内容の一部だけ違う別のフォームを書いて、
>同じように自動クリックしてデータを送る方法はありますでしょうか?
>出来れば、2つだけではなく、複数のフォームを配置したいのですが・・
ブラウザのsubmit処理は、送信後のレスポンスを表示するようにできています。
仮に、複数に送ることができたとしても、矛盾した動作になってしまいます。
全体がご自身のサイトであるなら、構成を組み替えることが可能でしょうから、全部をまとめて受信するabcd.phpなどを作成しておいて、そこで内容をチェックした上で、処理を分散したければサーバサイドで分散すればよいだけではないでしょうか。
(といっても、ご提示のような固定値を送るだけなら、チェックや処理をする必要もないので、いきなり結果を返すことが可能なはずなんですけれど。更に言うなら、データを送る必要もないように思えますね。)

>それを防ぐ方法(ひとつだけ開く)などはありますでしょうか。
ブラウザ側でsubmitする限りは、一つのurl対象ということになります。
データを送れさえすれば良いのであれば、ajaxで送信することは技術的には可能ですが、そのような処理をする必要もないと思われるので、上記のようにデータをまとめて送るようにしておくのが普通の方法ではないでしょうか。

特に、ご提示のように「固定値を送るだけ」という内容であるなら、多くの処理(クリックや送受信そのもの)を省略できそうな気がします。
(データそのものが不要なのではないかという気が多分にしますけれど…)
結果として、レスポンスの大幅な向上が図れることになりませんか?
    • good
    • 0
この回答へのお礼

素人発想のため申し訳ございません。お答えありがとうございました。

お礼日時:2017/11/29 19:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング

おすすめ情報