jQuery.Ajax()的数据参数类型详解

  

假如现在有这样一个表,单是添加元素用的。

        & 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()的数据参数类型详解