假如现在有这样一个表,单是添加元素用的。
& lt;形式id==' UserAdd addForm的行动。行动”类型=皃ost”比; & lt;标签=' uname的祝辞用户名& lt;/label>: & lt;输入type='文本' name=' uname id=皍name的祝辞& lt; br> & lt;标签=' mobileIpt祝辞手机号:& lt;/label> & lt;输入type='文本' name=' mobileIpt id=癿obileIpt”祝辞& lt; br> & lt;标签=铡谏?& lt;/label> & lt;输入type='文本' name='生日祝辞& lt; br> & lt;输入类型=鞍磁ァ眝alue=' https://www.yisu.com/zixun/提交”> 函数addUser () { var用户={ uname: $ (" # uname) .val (), mobileIpt: $ (" # mobileIpt”) .val (), 生日:$(" #生日”).val () }; . ajax({美元 url:“UserAdd.action”, 数据:用户, 类型:“文章”, 数据类型:“文本”, 成功:函数(味精){ 如果(味精==' 1 '){ console.log(“添加成功”); 其他}{ console.log(“添加失败”) } } }) }
这没有什么错,就是获取表单元素的值实在是太麻烦....这里只有三项,很多项的时候就废了....
直到有一天,我发现了jquery的serializeArray方法
序列化表格元素(类似“.serialize()的方法)返回JSON数据结构数据。
注意,此方法返回的是JSON对象而非JSON字符串。需要使用插件或者第三方库进行字符串化操作。
返回的JSON对象是由一个对象数组组成的,其中每个对象包含一个或两个名值对,名字参数和价值参数(如果值不为空的话)。
我们来试试看
$ (' # addForm ') .serializeArray ();//返回数据结构,是json数组,每个对像分别名称和值为关键,代表这个表单元素的名称和值 ( {" name ": " uname”、“价值”:"}, {" name ": " mobileIpt”、“价值”:"}, {" name ":“生日”,“价值”:"} )
这个貌似用不上啊
我们使用JQuery.param()方法处理一下:
var arr=$ (' # addForm ') .serializeArray (); 美元.param (arr); “uname=alice& mobileIpt=110,生日=1983-05-12 "
嘿这下符合我们的需求了吧,虽然不是json类型,但是至少可以作为数据上传了。
这里我们可以直接在ajax的数据处填上这个json数组,在jquery内部自己调用美元.param()处理的。
我们来看下jquery.param()方法的说明:
返回值:StringjQuery.param (obj,(传统))
将表单元素数组或者对象序列化。
参数
obj,(传统)
数组或jQuery对象会按照名称/值对进行序列化,普通对象按照键/值对进行序列化。
传统:是否使用传统的方式浅层序列化。
演示:
美元.param ({mobileIpt uanme:“维克”:110年,生日:' 2013-11-11 '}); “uanme=vic& mobileIpt=110,生日=2013-11-11 "
看着说明,貌似也跟我们没关系啊,我们换一个json数组来看
美元.param ([{uanme:“维克”},{mobileIpt:“110”},{生日:' 2013-11-11 '})); “未定义=,定义=,定义="
这个转换不成功了吧,为什么我们表单的那种数据能够成功转换成url参数呢?我们来看下jquery源码
//在ajax()方法中,对json类型的数据进行了.param美元()处理 如果(s。数据,和年代。processData,,typeof。数据!==白址?{ 年代。data=https://www.yisu.com/zixun/jQuery.param (s。数据,年代。传统的); }//参数方法中 如果(jQuery。isArray (a) | | (a。jquery & & ! jquery。isPlainObject (a))) {//序列化表单元素 jQuery。每个(一个函数(){ add (this.name,这。值); }); 其他}{//如果传统的“旧”的方式进行编码(1.3.2以上的方式//做),否则编码参数递归。 (前缀){ buildParams(前缀(前缀),传统的添加); } }
这下明白了吧,如果是json数据,那么挨个循环,只取他们的名字属性和价值属性拼接字符串。
如果是普通对象,循环该对象的属性,然后拼接字符串。
总结:
所以,本文要说的是,在jquery的ajax函数中,可以传入3种类型的数据
1。文本:
“uname=alice& mobileIpt=110,生日=1983-05-12 "jQuery.Ajax()的数据参数类型详解