jquery ajax请求对json数据解析的理解

3 篇文章 0 订阅
1 篇文章 0 订阅

前一段时间碰到一个问题,server端返回了json字符串,在ajax请求的success回调函数中不进行类型转换就能直接遍历返回的字符串数组?server端代码如下:

response.getWriter().write(cardservice.sgetCompanyInfo(comname,comarea,comtype).toString());

很明显,java web返回的是jsonArray转化成string 。然后ajax的处理逻辑代码如下:

$.ajax({
				url:"card/queryCompany.html",
				type:"post",
				dataType:"json",
				async: false,
				data:{comName:$("#comName").val(),comArea:$("#comArea").val(),comType:$("#comType").val()},
				success:function(data){
					$(data).each(function(index){

					var val = data[index];
					
					});
					Cookies.set("cmpSearchResult",data);

可以看到ajax的success对应的代码直接把从服务器返回的data用jquery的each方法进行遍历处理。这是为什么呢?js虽然是弱类型语言,但也不能这么将就吧。我认为是ajax请求内部对string类型进行了转化,后来验证是对的。

请注意:

dataType:"json"
如果我把这一句删除了,就会出现解析出错的问题。

进一步验证如下:

 $.ajax({
				url:"card/queryCompany.html",
				type:"post",
				async: false,
				data:{comName:$("#comName").val(),comArea:$("#comArea").val(),comType:$("#comType").val()},
				success:function(data){
<span style="white-space:pre">				</span>var data1 = eval("("+data+")");
					$(data1).each(function(index){

					var val = data1[index];
					
					});
					Cookies.set("cmpSearchResult",data);
				},


这个问题是搞清楚了,但是我把data数据写入cookie之后,再从cookie之中读取出来同样出现了不能直接遍历的问题:

<span style="white-space:pre">			</span>Cookies.set("cmpSearchResult",data);
<span style="white-space:pre">				</span>var data = Cookies.get("cmpSearchResult");
   			//eval方法加()的目的是将方法中的参数转化为表达式,因为json是以{}开头结尾的,这样容易让eval误会。不过jsonArray的话就不用
			var dataJSON = eval("("+data+")");             
			$.each(dataJSON, function (index, val) 
				{
					
				});

那么为什么呢?个人理解是data写入cookie之中时候,是把jsonArray对象转化成字符串的形式写入的。然后你再从中入去的话就需要把string eval成jsonArray对象,这样才能获取相关属性。

总结:弱类型语言并不意味着类型不用转换。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值