随笔 - 46  文章 - 36 评论 - 43 阅读 - 40357

jQuery Ajax:serialize()方法

 

主要参考:

《锋利的jQuery》单东林、张晓菲、魏然

www.3cschool.com.cn《jQuery 参考手册 - Ajax》

 

搜集整理:sagahu@163.com

 

简单示例

 

输出序列化表单值的结果:

 

$("button").click(function(){

  $("div").text($("form").serialize());

});

 

定义

 

serialize() 方法将表单元素的名称和值序列化为URL 编码文本字符串。返回值类似于:'single=1&multiple=2'。

 

您可以选择一个或多个表单元素(比如 input 及/或 文本框),或者 form 元素本身。

 

序列化的值可在生成 AJAX 请求时用于 URL 查询字符串中。

 

语法

 

. serialize ()

 

参数

说明

无参数

 

返回值

jQuery

 

详细说明

 

serialize() 方法创建以标准 URL 编码表示的文本字符串。它的操作对象是代表表单元素集合的 jQuery 对象。

 

表单元素有几种类型:

 

<form>

  <div><input type="text" name="a" value="1" id="a" /></div>

  <div><input type="text" name="b" value="2" id="b" /></div>

  <div><input type="hidden" name="c" value="3" id="c" /></div>

  <div>

    <textarea name="d" rows="8" cols="40">4</textarea>

  </div>

  <div><select name="e">

    <option value="5" selected="selected">5</option>

    <option value="6">6</option>

    <option value="7">7</option>

  </select></div>

  <div>

    <input type="checkbox" name="f" value="8" id="f" />

  </div>

  <div>

    <input type="submit" name="g" value="Submit" id="g" />

  </div>

</form>

 

.serialize() 方法可以操作已选取个别表单元素的 jQuery 对象,比如 <input>, <textarea> 以及 <select>。不过,选择 <form> 标签本身进行序列化一般更容易些:

 

$('form').submit(function() {

       alert($(this).serialize());

       return false;

});

 

输出标准的查询字符串:

 

a=1&b=2&c=3&d=4&e=5

 

注释:只会将”成功的控件“序列化为字符串。如果不使用按钮来提交表单,则不对提交按钮的值序列化。如果要表单元素的值包含到序列字符串中,元素必须使用 name 属性。

 

序列化的好处

 

下面这段代码,将表单字段的值逐个添加到$.get()方法的data参数中:

 

$("#send").click(function(){

       $.get("get1.php", {

                     username: $("#username").val(),

                     content: $("content").val()

              }, function(data, textStatus){

                     $("#resText").html(data);       // 将返回数据添加到页面上

              }

       );

});

 

这种方式在只有少量字段的表单中,勉强还可以使用,但如果表单元素越来越复杂,使用这种方式在增加大量工作的同时也使得表单缺乏弹性。而使用serialize()方法,可以方便地将DOM元素内容序列化为字符串,用于Ajax请求。把上面代码修改如下:

 

$("#send").click(function(){

       $.get("get1.php", $("#form1").serialize(),

              function(data, textStatus){

                     $("#resText").html(data);       // 将返回数据添加到页面上

              }

       );

});

 

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

 

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

 

{

       username: $("#username").val(),

       content: $("content").val()

}

 

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

 

"username="+encodeURIComponent($('#username').val())

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

 

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

 

因为serialize()方法作用于jQuery对象,所以不光只有表单能够使用它,其它选择器选取的元素也能够使用它。

 

$(":checkbox,:radio").serialize(); // 把复选框和单选框的值序列化为字符串,只会将选中的值序列化

posted on   萨迦狐  阅读(163)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示