banner
阿珏酱

阿珏酱

いつもとは逆の電車に乗り、見たこともない風景を見に行く
twitter
github
facebook
bilibili
zhihu
steam_profiles
youtube

如何優雅にフォームを送信する

ヒント:このヒントを見ると、現在の記事が元のemlogブログシステムから移行されたことを示しています。記事の公開日が非常に古く、レイアウトや内容が完全でない場合がありますので、ご了承ください。

フォームをエレガントに送信する方法

日付:2019-5-6 阿珏 折腾代码 浏览:1734 次 コメント:1 条

これは非常に基本的な HTML フォームの送信の問題ですが、非常に実用的なテクニックです。
私のビジネスシナリオは次のようです:

動的に作成可能な input を持つフォーム、以下の図を参照してください
image

これは、input の name が固定ではないことを意味します。そうでないと、確実に上書きされます。

第一の方法、伝統的な通常の送信方法、送信する各 input に一意の name を付ける#

<form id="form1" action="./index.php" method="get">
    <div class="form-control">
        <input type="text" name="name1" />
        <input type="text" name="num1" />
        <input type="text" name="img1" />
    </div>
    <br>
    <div class="form-control">
        <input type="text" name="name2" />
        <input type="text" name="num2" />
        <input type="text" name="img2" />
    </div>
    <br>
    <div class="form-control">
        <input type="text" name="name3" />
        <input type="text" name="num3" />
        <input type="text" name="img3" />
    </div>
    ......
  <input type="submit" value="Submit" />
</form>

ブラウザがキャプチャしたフォーマットは次のようになります
image
サーバーが取得し、印刷するデータは次のようになります。バックエンドのデータ処理は非常にフレンドリーではありません
image

第二の方法、配列を使用してフォームを送信する#

<form id="form1" action="./index.php" method="get">
    <div class="form-control">
        <input type="text" name="infos[1][name]" />
        <input type="text" name="infos[1][num]" />
        <input type="text" name="infos[1][img]" />
    </div>
    <br>
    <div class="form-control">
        <input type="text" name="infos[2][name]" />
        <input type="text" name="infos[2][num]" />
        <input type="text" name="infos[2][img]" />
    </div>
    <br>
    <div class="form-control">
        <input type="text" name="infos[3][name]" />
        <input type="text" name="infos[3][num]" />
        <input type="text" name="infos[3][img]" />
    </div>
    ......
  <input type="submit" value="Submit" />
</form>

ブラウザとバックエンドが印刷するものは次のとおりです
image
image
注意深く観察すると、送信される name の値が変化し、同じになることに気付きます。配列?

バックエンドに送信すると、データが以前よりも整然となります
ただし、ここで注意する必要があるのは、送信される配列のキーに引用符を使用する必要はないことです。そうしないと、引用符もキーの一部になります。

もちろん、実際の場面では、次のような問題にも遭遇するかもしれません。送信するグループの数(上記の 1、2、3 のような)が確定していない場合、フロントエンドで自由に追加できる場合、どのようにしてこれらのコンテンツを配列で送信しますか?

以下は私のビジネスでの実際の解決策です
image
これにより、2 次元配列のキーを自分で管理する必要がなくなり、ブラウザが自動的に生成してくれます
image
バックエンドで受け取るデータは次のようになり、非常に簡単に処理できるようになりました
image
この方法は、関連するデータの不特定の数のグループを送信する必要がある場合に適用されます。
終わりに花を撒きます!~

ユーザーコメント:

image Railgun 丶無限 2 年前 (2019-05-21)
新しいスキルを手に入れました√

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。