jquery serialize()方法的扩展

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;
    }
});

 

posted @ 2015-09-17 14:22  嘿煤贵  阅读(920)  评论(0编辑  收藏  举报