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;
    }
});
时间: 2024-08-02 04:08:56

jquery serialize()方法的扩展的相关文章

jquery serialize()方法可以序列化表单值为字符串

<form> <div><input type="text" name="a" value="1" id="a" /></div> <div><input type="text" name="b" value="2" id="b" /></div> <div&

jquery.serialize

jQuery - serialize() 方法 erialize() 方法通过序列化表单值,创建 URL 编码文本字符串. serialize()函数用于序列化一组表单元素,将表单内容编码为用于提交的字符串. serialize()函数常用于将表单内容序列化,以便用于AJAX提交. 该函数主要根据用于提交的有效表单控件的name和value,将它们拼接为一个可直接用于表单提交的文本字符串,该字符串已经过标准的URL编码处理(字符集编码为UTF-8). 该函数不会序列化不需要提交的表单控件,这和常

2016 系统设计第一期 (档案一)jQuery ajax serialize()方法form提交数据

jQuery ajax serialize()方法form提交数据,有个很奇怪的问题,好像不能取到隐藏控件的值. //点击提交按钮保存数据 $('#btn_submitUser').click(function () { var UserId = $('#UserId').val(); if (UserId == "") { $.ajax({ type: "POST", url: '/Users/Create/', data: $("#SaveUserFo

jQuery的序列化元素 serialize()方法 serializeArray()方法 param()方法

当提交的表单元素较多时用serialize()方法,serialize()方法也是作用于一个jQuery的对象,它能够将DOM元素内容序列化为字符串,用于Ajax请求. serialize() 方法通过序列化表单值,创建 URL 编码文本字符串. .serialize() 方法可以操作已选取个别表单元素的 jQuery 对象,比如 <input>, <textarea> 以及 <select>.不过,选择 <form> 标签本身进行序列化一般更容易些: $(

jquery serialize()、serializearray()已经$.param方法

serialize: 序列表表格内容为字符串,用于 Ajax 请求.可以对整个form,也可以只针对某部分. HTML 代码: <p id="results"><b>Results: </b> </p> <form> <select name="single"> <option>Single</option> <option>Single2</optio

扩展jQuery的方法统一处理AJAX调用过程中产生的异常错误信息

由于项目中大量的实用了.post方法,而该方法默认不对请求的异常进行处理,后期又要处理该问题.前期的解决方案是将使用.post请求都改造为$.ajax请求,但由于两个方法的实现(需要的参数)等相差很大,修改起来很麻烦! 期间尝试使用定义"AJAX 请求发生错误时执行函数($(document).ajaxError())" 的方式来解决问题,但影响范围太大,长轮询发生的错误也被捕获,导致页面一打开就弹出系统异常的对话框. 所以这里采用扩展jQuery的方法的技术来解决问题: /* 扩展j

jQuery ajax - serialize() 方法

jQuery ajax - serialize() 方法 jQuery Ajax 参考手册 实例 输出序列化表单值的结果: $("button").click(function(){   $("div").text($("form").serialize()); }); 亲自试一试 定义和用法 serialize() 方法通过序列化表单值,创建 URL 编码文本字符串. 您可以选择一个或多个表单元素(比如 input 及/或 文本框),或者 fo

利用jQuery对插件进行扩展时,方法$.extend()、$.fn.extend()区别与联系

  利用JQ开发插件的方法: 1.jQuery.extend(); 2.jQuery.fn.extend(); 3.通过$.widget()应用jQuery UI的部件工厂方式创建. 由于第三种方式通常用于开发比较高级的jQuery的部件,开发难度较大,所以第一种和第二种方式用的更为广泛,下面主要对前两种方式的区别和联系以及使用的方法做一些介绍. 简要的说明一下: jQuery是一个封装的非常好的类,$(“#btn”)就相当于创建了一个jQuery的实例. 1.方法jQuery.fn .exte

jQuery 的 serializeArray()、serialize() 方法

serializeArray()方法说明: 实例 输出以数组形式序列化表单值的结果: $("button").click(function(){ x=$("form").serializeArray(); $.each(x, function(i, field){ $("#results").append(field.name + ":" + field.value + " "); }); }); 亲自试一