jQuery序列化元素(学习笔记)

内容:摘自《锋利的jQuery》第一版 第六章


1、serialize()方法

在做项目的过程中,表单是必不可少的。经常用来提供数据,例如注册、登录等。常规的方法是使表单提交到另一个页面,整个浏览器都会被刷新,而使用 Ajax技术则能狗异步地提交表单,并将服务器返回的数据像是在当前页面中。

前面在讲 $.get()和$.post()方法的时候,表单的HTML代码如下:

<form id="form1" action="#">
    
<p>评论:</p>

<p>姓名:<input type="text" name="username" id="username" /></p>

<p>内容:<textarea name="content" id="content" rows="2" cols="20" ></textarea></p>

<p><input type="text" id="send" value="提交" /></p>

</form>

为了获取姓名和内容,必须将字段的值逐个添加到 data 参数中,代码如下:

$(function(){
    //点击提交按钮,将表单数据提交到服务器 并 接收响应的数据    
    $("#send").click(function(){
        $.get("get1.php",{
                //获取页面元素
                username: $("#username").val(),
                content: $("#content").val()
            },
            function(data, textStatus){
                //将返回的数据添加到页面上
                $("#resText").html(data);
            }
        );
    });
});

这种方式在只有少量字段的表单中,勉强还可以使用,如果表单元素越来越复杂,使用这种方式在增大工作量的同时也使表单缺乏弹性。

jQuery为这一常用的操作提供了一个简化的方法  ---  serialize()。与jQuery中的其他方法一样,serialize()方法也是作用于一个

jQuery对象,它能够将DOM元素序列号为字符串,用于Ajax请求。通过使用serialize()方法可以把刚才的jQuery代码改为如下:

$(function(){
    //点击提交按钮,将表单数据提交到服务器 并 接收响应的数据    
    $("#send").click(function(){
        $.get("get1.php",
            $("#form1").serialize(),
            function(data, textStatus){
                //将返回的数据添加到页面上
                $("#resText").html(data);
            }
        );
    });
});

当点击 “提交” 按钮后,也能达到同样的效果,如下图所示:

 

即使在表单中再添加字段,脚本仍然能够使用,并且不需要做其他多余的工作。

需要注意的是,$.get()方法中的data参数不仅可以使用映射方式,如以下jQuery代码:

{
    username: $("#username").val(),   
    content: $("#content").val()
}

也可以使用字符串方式,如以下jQuery代码:

"username=" + encodeURIComponent($("#username").val()) +  
"&content=" + encodeURIComponent($("#content").val())

用字符串方式时,需要注意对字符编码(中文问题),如果不希望编码带来的麻烦,可以使用 serialize()方法,它会自动编码。

因为 serialize()方法作用于 jQuery对象,所以不光只有表单能使用它,其他选择器选取的元素也都能使用它,如一下jQuery代码:

$(":checkbox,:radio").serialize();

把复选框和单选框的值序列化为字符串形式,只会将选中的值序列化。

 

2、serializeArray()方法

在 jQuery中还有一个与 serialize()方法类似的方法  ---  serializeArray(),该方法不是返回字符串,而是将DOM元素序列化后,返回JSON格式的数。jQuery代码如下:

var fields = $(":checkbox,:radio").serializeArray();
console.log(fields);// 用 Firebug 输出

通过console.log()方法输出fields对象,然后再Firebug中查看该对象,如下图所示的userObjects对象:

既然时一个对象,那么就可以使用 $.each() 函数对数据进行迭代输出。代码如下:

$(function(){
    var fields = $(":checkbox,:radio").serializeArray();
    console.log(fields);// 用 Firebug 输出
    $.each( fields , function( i , field ){
        $("#results").append(field.value + " , ");
    });
});

 

3、$.param()方法

它是 serialize()方法的核心,用来对一个数组或对象按照 key/value 进行序列化。比如将一个普通的对象序列化:

var obj = { a: 1 , b: 2 , c: 3 };
var k = $.param(obj);
alert(k);// 输出 a=1&b=2&c=3

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值