我們在平常使用Jquery異步提交表單,一般是在submit()中,使用$.ajax進行。比如:
$(function(){
$('#myForm').submit(function(){
$.ajax({
url:"/WebTest/test/testJson.do",
data:$('#myForm').serialize(),
dataType:"json",
error:function(data){
alert(data);
},
success:function(data){
alert(data);
}
});
});
})
這樣的方式掩蓋了form的功能,使它成為了變相的ajax。下面來看看符合form思想的ajaxForm。
ajaxForm:
先下載:http://files.cnblogs.com/china-li/jquery.form.js
兩個主要的API:ajaxForm() ajaxSubmit()。
ajaxForm()配置完之后,並不是馬上的提交,而是要等submit()事件,它只是一個准備。一般用法:
$(document).ready(function() {
var options = {
target: '#output1', // target element(s) to be updated with server response
beforeSubmit: showRequest, // pre-submit callback
success: showResponse // post-submit callback
// other available options:
//url: url // override for form's 'action' attribute
//type: type // 'get' or 'post', override for form's 'method' attribute
//dataType: null // 'xml', 'script', or 'json' (expected server response type)
//clearForm: true // clear all form fields after successful submit
//resetForm: true // reset the form after successful submit
// $.ajax options can be used here too, for example:
//timeout: 3000
};
// bind form using 'ajaxForm'
$('#myForm1').ajaxForm(options).submit(function(){return false;});
});
這個是官方的例子,不過他沒有最后的提交。提交中返回false,阻止它的默認提交動作,而是用ajax交互。
其中options的屬性,重要的解釋一下:
target 返回的結果將放到這個target下
url 如果定義了,將覆蓋原form的action
type get和post兩種方式
dataType 返回的數據類型,可選:json、xml、script
clearForm true,表示成功提交后清除所有表單字段值
resetForm true,表示成功提交后重置所有字段
iframe 如果設置,表示將使用iframe方式提交表單
beforeSerialize 數據序列化前:function($form,options){}
beforeSubmit 提交前:function(arr,$from,options){}
success 提交成功后:function(data,statusText){}
error 錯誤:function(data){alert(data.message);}
ajaxSubmit示例:
$(document).ready(function() {
var options = {
target: '#output2', // target element(s) to be updated with server response
beforeSubmit: showRequest, // pre-submit callback
success: showResponse // post-submit callback
// other available options:
//url: url // override for form's 'action' attribute
//type: type // 'get' or 'post', override for form's 'method' attribute
//dataType: null // 'xml', 'script', or 'json' (expected server response type)
//clearForm: true // clear all form fields after successful submit
//resetForm: true // reset the form after successful submit
// $.ajax options can be used here too, for example:
//timeout: 3000
};
// bind to the form's submit event
$('#myForm2').submit(function() {
// inside event callbacks 'this' is the DOM element so we first
// wrap it in a jQuery object and then invoke ajaxSubmit
$(this).ajaxSubmit(options);
// !!! Important !!!
// always return false to prevent standard browser submit and page navigation
return false;
});
});
其他的API:
$('#myFormId').clearForm();
$('#myFormId .specialFields').clearFields();
$('#myFormId').resetForm();
var value = $('#myFormId :password').fieldValue();
var queryString = $('#myFormId .specialFields').fieldSerialize();
