http://www.wufangbo.com/jquery-form-to-json/
大家知道Jquery中有serialize方法,可以将表单序列化为一个“&”连接的字符串,但却没有提供序列化为Json的方法。不过,我们可以写一个插件实现。
我在网上看到有人用替换的方法,先用serialize序列化后,将&替换成“:”、“‘”:
Js代码
/**
* 重置form表单
* @param formId form的id
*/
function resetQuery(formId){
var fid = “#” + formId;
var str = $(fid).serialize();
//str= cardSelectDate=3&startdate=2012-02-01&enddate=2012-02-04
var ob= strToObj(str);
alert(ob.startdate);//2012-02-01
}
function strToObj(str){
str = str.replace(/&/g,”‘,'”);
str = str.replace(/=/g,”‘:'”);
str = “({‘”+str +”‘})”;
obj = eval(str);
return obj;
}
个人感觉这样做有bug。
我的方法是,先用serializeArray序列化为数组,再封装为Json对象。
下面是表单:
Html代码
<form id=”myForm” action=”#”>
<input name=”name”/>
<input name=”age”/>
<input type=”submit”/>
</form>
Html代码
<form id=”myForm” action=”#”>
<input name=”name”/>
<input name=”age”/>
<input type=”submit”/>
</form>
Jquery插件代码如下:
Js代码
(function($){
$.fn.serializeJson=function(){
var serializeObj={};
$(this.serializeArray()).each(function(){
serializeObj[this.name]=this.value;
});
return serializeObj;
};
})(jQuery);
下面测试一下:$(“#myForm”).bind(“submit”,function(e){
Js代码e.preventDefault();
console.log($(this).serializeJson());
});输入a,b提交,得到序列化结果
{age: “b”,name: “a”}
上面的插件,不能适用于有多个值的输入控件,例如复选框、多选的select。下面,我将插件做进一步的修改,让其支持多选。代码如下:
Js代码
(function($){
$.fn.serializeJson=function(){
var serializeObj={};
var array=this.serializeArray();
var str=this.serialize();
$(array).each(function(){
if(serializeObj[this.name]){
if($.isArray(serializeObj[this.name])){
serializeObj[this.name].push(this.value);
}else{
serializeObj[this.name]=[serializeObj[this.name],this.value];
}
}else{
serializeObj[this.name]=this.value;
}
});
return serializeObj;
};
})(jQuery);
这里,我将多选的值封装为一个数值来进行处理。如果大家使用的时候需要将多选的值封装为“,”连接的字符串或者其他形式,请自行修改相应代码。
测试如下:
表单:
Html代码<form id=”myForm” action=”#”>
<input name=”name”/>
<input name=”age”/>
<select multiple=”multiple” name=”interest” size=”2″>
<option value =”interest1″>interest1</option>
<option value =”interest2″>interest2</option>
<option value=”interest3″>interest3</option>
<option value=”interest4″>interest4</option>
</select>
<input type=”checkbox” name=”vehicle” value=”Bike” /> I have a bike
<input type=”checkbox” name=”vehicle” value=”Car” /> I have a car
<input type=”submit”/>
</form>
测试结果:
{age: “aa”,interest: [“interest2″, “interest4″],name: “dd”,vehicle:[“Bike”,”Car”]}
分享到:
相关推荐
总结,通过jQuery我们可以方便地将JSON对象转换为适合表单提交的格式,并利用Ajax方法发送到服务器。这极大地提高了前端开发的效率和灵活性,使得前端和后端的数据交互变得更加简单。在实际项目中,根据具体需求,...
在标题和描述提到的场景中,我们需要创建一个jQuery扩展,将复杂的form表单数据转换为JSON对象。这通常涉及到遍历表单元素,获取它们的值,并构建JSON对象。以下是一个简单的示例: ```javascript (function($) { ...
大家知道Jquery中有serialize方法,可以将表单序列化为一个“&”连接的字符串,但却没有提供序列化为Json的方法。不过,我们可以写一个插件实现。 我在网上看到有人用替换的方法,先用serialize序列化后,将&替换...
本篇文章介绍了一个自定义的jQuery插件方法——`serializeJson`,该方法可以将表单中的所有字段序列化为一个JSON对象,极大地简化了获取和处理表单数据的过程。 **1. serializeJson方法实现** ```javascript $.fn....
jQuery提供了一个方便的插件,叫做`serializeJSON`,它能够将表单数据序列化为JSON对象。首先,确保在项目中引入了jQuery库和`serializeJSON.js`插件: ```html <script src="https://code.jquery....
收到JSON响应后,使用`$.parseJSON`将JSON字符串解析成JavaScript对象,然后可以方便地操作这些数据来更新DOM元素。反之,如果需要将用户在网页上的操作结果(如表单数据)发送回服务器,可以先使用`$.toJSON`将数据...
本文将深入探讨如何处理jQuery-autoComplete插件在接收到JSON对象返回数据时可能遇到的问题。 `jQuery-autoComplete` 是jQuery UI的一个插件,它允许我们为输入框提供动态的下拉建议。这个功能通过监听用户输入并...
标题提到的"jQuery把表单元素变为json对象"是指将HTML表单中的数据转换为JSON(JavaScript Object Notation)格式的对象,便于数据的传输和处理。JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器...
接下来,我们使用jQuery的`.serializeArray()`方法来自动将表单中的数据转换成JSON对象。`.serializeArray()`方法会遍历表单元素,并将表单的元素名称和值收集到一个对象数组中。每个对象都包含`name`和`value`两个...
jQuery库提供了一种简单的方法来实现这一功能,本篇文章将详细介绍如何使用jQuery将form表单序列化并转换为JSON对象。 首先,让我们理解一下基本概念。**序列化(Serialization)**是将复杂的数据结构转化为字符串...
总结起来,通过上述步骤,我们可以使用jQuery将HTML表单元素序列化为JSON对象,这在与服务器进行数据交互时非常有用。这个过程包括了选择表单元素、序列化为数组、处理同名元素以及将数据结构转换为JSON格式。这个...
4. **序列化表单数据为JSON**:jQuery提供`serializeArray()`和`serializeObject()`(非官方插件)方法将表单数据转换为JSON格式,便于发送Ajax请求: ```javascript var formData = $('form').serializeArray();...
但是,观察输出的信息,发现serialize()方法做的是将表单中的数据以htpp请求格式拼接成字符串。 serialize确实是能够解决一般的提交数据。但是有时我们需要的是一个object对象,而不是字符串(比如jqgrid reload时...
把表单转换出json对象 //把表单转换出json对象 $.fn.toJson = function () { var self = this, json = {}, push_counters = {}, patterns = { validate: /^[a-zA-Z][a-zA-Z0-9_]*(?:\[(?:\d*|[a-zA-Z0-9_]+)\...
为什么用json-edit ...值/默认值:{} /一个json对象 ExpandingLevel /默认值:-1 /最初扩展的树级别。 默认情况下,所有级别都会扩展 renderFirstLevel /默认值:false /表示根元素以可视容器的形式呈现
在PHP中,我们可以使用json_encode()函数将PHP数组或对象转换为JSON字符串。例如: ```php $data = array( 'name' => 'John', 'age' => 30, 'city' => 'New York' ); $json = json_encode($data); echo $...