jQuery有個方法$.fn.serialize,可將表單序列化成字符串;還有個方法$.fn.serializeArray,可將表單序列化成數組。那若是要將表單序列化成對象或者JSON格式數據,該如何操做呢?javascript
在實際項目開發中,咱們可能會遇到複雜表單的提交處理,咱們使用Ajax異步來將這個足夠複雜的表單提交給後端處理。常規的辦法是將表單各個字段組成字符串或者json格式,而後post給後端PHP處理,這樣的話稍微複雜的表單就會讓前端會很是累,由於要一個個表單字段處理。而jQuery自帶的$.fn.serialize和$.fn.serializeArray都不能知足需求。幸虧,我給你們介紹一款序列化json和對象的jQuery插件——jquery.serialize-object.js。php
如下是一個普通的表單,不算複雜,僅用做演示html
<form class="form-horizontal" role="form" id="myform" action="" method="post"> <div class="form-group"> <label for="email" class="col-sm-2 control-label">Email</label> <div class="col-sm-10"> <input type="email" class="form-control" id="email" name="user[email]" placeholder="Email" value="demo@example.com"> </div> </div> <div class="form-group"> <label for="inputPassword3" class="col-sm-2 control-label">技能</label> <div class="col-sm-10"> <label class="checkbox-inline"> <input type="checkbox" name="user[skill][]" value="html5"> HTML5 </label> <label class="checkbox-inline"> <input type="checkbox" name="user[skill][]" value="javascript" checked> Javascript </label> <label class="checkbox-inline"> <input type="checkbox" name="user[skill][]" value="PHP" checked> PHP </label> <label class="checkbox-inline"> <input type="checkbox" name="user[skill][]" value="Python"> Python </label> <label class="checkbox-inline"> <input type="checkbox" name="user[skill][]" value="MySQL" checked> MySQL </label> <label class="checkbox-inline"> <input type="checkbox" name="user[skill][]" value="Redis"> Redis </label> </div> </div> <div class="form-group"> <label for="email" class="col-sm-2 control-label">月薪</label> <div class="col-sm-10"> <select class="form-control" name="user[salary]"> <option value="5000">5000如下</option> <option value="5000-10000">5000-10000</option> <option value="10000-20000">10000-20000</option> <option value="20000">20000以上</option> </select> </div> </div> <div class="form-group"> <label for="email" class="col-sm-2 control-label">自我評價</label> <div class="col-sm-10"> <textarea class="form-control" name="user[intro]" rows="3"></textarea> </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <button type="submit" class="btn btn-default" id="subbtn">提交</button> </div> </div>
細心的朋友會發現,我把每一個表單元素命名成如name="user[email]"
這樣的格式,這麼作就是爲了好序列化成json或object。前端
首先載入jquery庫和jquery.serialize-object.js,在我打包的源碼中這兩個js文件,其中jQuery是引用的CDN資源。html5
<script src="http://apps.bdimg.com/libs/jquery/1.9.1/jquery.min.js"></script> <script src="js/jquery.serialize-object.min.js"></script>
當咱們填寫完表單後,點擊提交按鈕,整個表單元素被序列化成JSON數據,而後經過post異步提交給了post.php處理,來看代碼:java
$(function(){ $(document).on('click', '#subbtn', function(event) { event.preventDefault(); var json_data = $('#myform').serializeJSON(); $.post('post.php', json_data, function(data) { console.log(data); }); }); });
上述代碼中,咱們只須要使用$('#myform').serializeJSON()
就能夠得到整個表單全部字段的數據,並以json格式序列化,這時post的數據變成如下格式:jquery
{"user":{"email":"demo@example.com","skill":["html5","javascript","PHP","MySQL"],"salary":"5000","intro":"的撒的\r\n天654\r\n第三方"}}
固然jquery.serialize-object.js還提供了一個序列化對象的方法:serializeObject,使用以下代碼能夠獲得一個javascript object對象:git
var obj_data = $('#myform').serializeObject();
前端將表單數據序列化成json格式的數據了,並且經過Ajax一次性POST給到PHP,那麼PHP該怎麼獲取這些表單數據呢?因爲前端post過程屬於原生的數據post,PHP不能經過$_POST[]來接收表單數據,而要經過php://input
來接收post數據。github
$data = file_get_contents('php://input'); print_r(json_decode($data, true));
PHP接收到post數據後,能夠將其轉成數組就能夠很好的操做數組了web
https://github.com/macek/jquery-serialize-object
https://www.helloweba.com/view-blog-395.html