将表单序列化之后变成的json格式的数据无法通过Ajax发送到后台的解决

问题描述:动态生成的表格,封装到同一个form之中,每个input必须有name属性,当使用jquery提供的serialize()方法将所有name-value自动生成之后,再对其进行人为的替换,最终在jsp中直接组装成json格式的数据,如代码一所示:

                                var json1=$("#form1").serialize();//将id为form1的表单序列化
				var json = " { ";
				var f="t";
				var msg2 = json1.split("&");   //先以“&”符号进行分割,得到一个key=value															形式的数组
				for(var i = 0; i<msg2.length; i++){
				  var msg3 = msg2[i].split("=");  //再以“=”进行分割,得到key,value形式															的数组
				  for(var j = 0; j<msg3.length; j++){
				    if(f=="t"){
				     json+="\""+msg3[j]+"\"";
				   	 json+=" : ";
				   	 f="f";
				    }else if(f=="f"){
				    json+="\""+msg3[j]+"\"";
				    	json+=" ,";
				    	f="t";
				    }
				  }
				}
				json=json.substring(0, json.length-1);
				json+=" }";

此时json变量已经是“json”格式的数据了,然而当将json直接放到如下的Ajax中执行时,数据根本为传到后台,但是打上dbugger获取到json的值,将改值直接替换方法中得分json后,传输正常!

代码如下(postJSON是对jquery的Ajax方法进行了封装处理,道理是一样的,第一个参数是访问路径,第二个参数是发送到后台的json格式的数据,第三个则是一个有返回值的方法)

$.postJSON(webRootPath+"/basicsinfo/membership/insert",json  , function(data){

if(data){

。。。。。。

}

});

解决方法:

原因是由于组装之后的数据是一个字符串,而传输时需要的是json对象,解决方法是将最终的字符串通过json= eval('(' + json + ')');  json转变为json对象 这样的话就能传到后台了!

json= eval('(' + json + ')');

$.postJSON(webRootPath+"/basicsinfo/membership/insert",json  , function(data){

if(data){

。。。。。。

 }

});
总结:如果字符串拼接之后的格式是{k:v,k:v......}这种的话,直接使用
eval('(' + json + ')');来转为json对象,如果是[{k:v,k:v......},{k:v,k:v......}...]这种格式的话,则直接使用eval(json)即可


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

於之

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值