Webサイトの運営会社で得た技術的な知識を記録していきます。 サーバー情報、Webデザイン、プログラミング、このWebサイトで利用させていただいているBlogger(ブロガー)についても公開していきます。

jQueryでformオブジェクトを生成してPOST送信する方法

form要素から直接送信させるのではなく、JavaScriptで何らかの処理をさせてからform送信したい場合があると思います。

例えば、バリデーションをさせてから問題がなければ、submitを実行してデータを送信するといった場合です。

その他にも状況に応じて、送信するデータを変更したい場合などにも有効かもしれません。

送信ボタンが押された後、jQueryでデータを生成してから、form送信する方法です。

フォームの二重送信対策にも有効かもしれません。
応用すれば、<a>要素をクリックすることで、POST送信することも可能だと思います。

画像を添付したりするマルチパートの送信には対応していません。
必要な場合は、手を加えてください。


PHPにデータを渡した場合を想定しています。

例として、example.php にデータ送信します。
送信先URLの指定は、 action または data-action の属性のどちらかに記述してください。

HTML&jQuery で example.php にPOST送信

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<title></title>
<script type="text/javascript">
<!--
jQuery(function(){
    $('section').on('submit', "form", function(){
        var flag = false;
        if(flag == false){
            flag = true;
 
            // form オブジェクト作成
            var form = $('<form/>', {action:null, method:null});
 
            // method 属性設定
            if($(this).attr('method')){
                form[0].method = $(this).attr('method');
            }
 
            // action 属性設定
            if($(this).attr('data-action')){
                form[0].action = $(this).attr('data-action');
            } else if($(this).attr('action')){
                form[0].action = $(this).attr('action');
            }
 
            // データ 設定
            $.each($(this).serializeArray(), function(key, val){
                form.append($('<input/>', {type:'hidden', "name":val.name, "value":val.value}));
            });
 
            // formをbody要素に挿入
            form.appendTo(document.body);
 
            // 送信
            form.submit();
        }
 
        return false;
    });
});
//-->
</script>
</head>
<body>
    <section>
        <form method="post" action="" data-action="example.php">
            <input type="text" name="data[key-1]" value="VALUE-1" /><br />
            <input type="hidden" name="data[key-2]" value="VALUE-2" /><br />
            <button type="submit">送信</button>
        </form>
    </section>
</body>
</html>


送信ボタンを押した結果

送信後、example.phpが受け取ったデータです。

example.php が受け取ったPOSTデータ

Array
(
    [data] => Array
        (
            [key-1] => VALUE-1
            [key-2] => VALUE-2
        )
)


送信先URLの指定例

補足として、送信先を指定する箇所です。
action か data-action のどちらかに設定してください。

例:送信先のURLのの指定方法

// data-action属性に指定した場合 (両方指定した場合は、data-actionが優先)
<form method="post" action="" data-action="example.php">
 
// action属性に指定した場合
<form method="post" action="example.php" data-action="">


以上、jQueryからformオブジェクトを生成してPOST送信する方法でした。

0 件のコメント:

人気記事

ラベル

ページ

このブログを検索