Jquery提供的序列化表单方法serialize方法确实方便,但是我在使用的时候发现了一个弊端:当我使用type:“post”进行ajax请求的时候,
这个时候参数data:$("#myform").serialize()是这样获取的,请求之后发现还是一个get请求,参数被拼接在了地址后面,并不是实际意义的post请求,
这里可以扩展Jquery库方法,如下代码:
jQuery.fn.extend({
serialize: function() {
return jQuery.param( this.serializeArray() );
},
serializeArray: function() {
return this.map(function(){
return this.elements ? jQuery.makeArray( this.elements ) : this;
})
.filter(function(){
return this.name && !this.disabled &&
( this.checked || rselectTextarea.test( this.nodeName ) ||
rinput.test( this.type ) );
})
.map(function( i, elem ){
var val = jQuery( this ).val(); return val == null ?
null :
jQuery.isArray( val ) ?
jQuery.map( val, function( val, i ){
return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
}) :
{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
}).get();
},
serializeObject:function(){ //扩展方法,为了直接生成对象-属性类型的参数集合,这样就实现了真正意义的post提交,参数隐藏
var _arrayParams=this.serializeArray();
var _objParams={};
jQuery.each(_arrayParams,function(_fpi,_fpitem){
_objParams[_fpitem.name]=_fpitem.value;
});
return _objParams;
}
});