您可以将.submit
事件附加到所有表单以捕获提交,然后.preventDefault()
在事件对象上使用以防止实际页面提交(阻止它更改页面)。然后序列化表单的数据(做一个名值对的字符串),从表单元素的action属性中获取url然后调用jquery的ajax函数
将$("form")
其附加到页面上的所有表单中
HTML
<form method='post' action='form_target.php'>
<input type='text' name='fieldname' />
<button type='submit'/>
</form>
JAVASCRIPT
$("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-* 属性中命名的两个函数
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]();