イベントをすべてのフォームに添付して.submit
送信をキャッチ.preventDefault()
し、イベントオブジェクトで使用して実際のページ送信を防ぐことができます (ページの変更を停止します)。次に、フォームのデータをシリアル化し (名前と値のペアの文字列を作成)、フォーム要素の action 属性から URL を取得してから、jquery の ajax 関数を呼び出します。
$("form")
セレクターの一部として他に何も使用しないと、ページ上のすべてのフォームにこれがアタッチされます
HTML
<form method='post' action='form_target.php'>
<input type='text' name='fieldname' />
<button type='submit'/>
</form>
ジャバスクリプト
$("form").submit(function(e){
e.preventDefault();
var data = $(this).serialize();
var url = $(this).attr("action");
$.ajax({
url:url,
type:"POST",
data:data,
success:function(){
//do something when post succedes
},
error:function() {
// do something when it fails
}
});
});
JQuery .ajax
JQuery .serialize
JQuery .submit
これをさらに拡張するには、各フォームが特定の成功メソッドを実行するようにすることができます。これは、特定のフォーム送信に対して特定の何かが必要な場合に役立ちます。
最初に各フォームに data-* 属性を与えます。これを後で送信イベントで使用して、そのフォームの特定の機能をトリガーできます。
<form method='post' action='form_target.php'
data-onerror="nameSubmitError"
data-onsuccess="nameSubmitSuccess">
次に、data-* 属性で指定した 2 つの関数を作成します
function nameSubmitError() {
//Do some code that will handle the error
}
function nameSubmitSuccess() {
//Do some code that will handle the success
}
そして .submit イベントで
$("form").submit(function(e){
e.preventDefault();
var data = $(this).serialize();
var url = $(this).attr("action");
var errorCallback = $(this).data("onerror");
var successCallback = $(this).data("onsuccess");
$.ajax({
url:url,
type:"POST",
success:function(){
//Check that we have a defined function before trying to execute it
if( typeof(window[successCallback]) == "function" ) {
//We do have a defined function so execute it
window[successCallback]();
}
},
error:function() {
//Check that we have a defined function before trying to execute it
if( typeof(window[errorCallback]) == "function" ) {
//We do have a defined function so execute it
window[errorCallback]();
}
}
});
});
もちろん、すべてのコールバック関数をグローバル空間に配置すると、それが汚染されるため、すべての関数を単一のオブジェクトにセットアップし、代わりにオブジェクト名を使用できます。window
var formCallbacks = {
nameSubmitError:function() {
//Do some code that will handle the error
},
nameSubmitSuccess: function() {
//Do some code that will handle the success
}
};
そして .submit イベントで次のように変更window
しますformCallbacks
//window[errorCallback]();
//Becomes
formCallbacks[errorCallback]();