文档章节

java ajax 请求后获取 json 数据 以及 使用 解析 ,解惑

之渊
 之渊
发布于 2017/05/05 15:46
字数 1230
阅读 45
收藏 1

写这个内容是 因为。。。框架一直在用ajax ,,传输 json 但是一直不太明白为什么要这样配置, 以及 前端ajax 怎么 使用 后台传输过来的数据。 首先 是 spirng mvc 的 配置

<!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 请求映射 -->
	<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" >
		<!-- 使用自定义的输出内容转换器,而不是默认的  -->
		<property name="messageConverters">
			<!--转换器为了响应输出是 字符串还是xml还是json内容给客户端的, 
			响应客户是 xml 格式还是 json格式, 要看 客户端请求头的 Accept 是 json 还是 xml 如果 返回类给客户端的话
			 当然,如果 客户端请求是  application/xml 而xml没有配置好,返回的就是 json 格式的数据
			  -->
			<list>
				<bean
					class="org.springframework.http.converter.ByteArrayHttpMessageConverter" />
				<bean
					class="org.springframework.http.converter.StringHttpMessageConverter">
					<property name="writeAcceptCharset" value="false" />
					<property name="supportedMediaTypes">
						<!--返回客户端string 类型的字符串,UTF-8 编码解决中文乱码  -->
 						<bean class="org.springframework.http.MediaType">  
                            <constructor-arg index="0" value="text" />  
                            <constructor-arg index="1" value="plain" />  
                            <constructor-arg index="2" value="UTF-8" />  
                        </bean>
					</property>
				</bean>		
						
				<bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter" >
					<property name="supportedMediaTypes"> 
						<list> 
							<value>text/html;charset=UTF-8</value> 
							<value>text/plain;charset=UTF-8</value> 
							<value>application/xml;charset=UTF-8</value>
						</list>
					</property>
				</bean>
				
				<!-- 
				为了返回xml格式的数据配置的,目前用不到,参考
				要使用这个 ,需要 将 返回的 实体类 加上xml 对应的注解才可以的  @XmlRootElement 这类的
				可以不用在意,因为xml 很少用,都是用的 json 了
				<bean id="marshallingHttpMessageConverter"
	class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">
	<property name="marshaller" ref="castorMarshaller" />
	<property name="unmarshaller" ref="castorMarshaller" />
	<property name="supportedMediaTypes">
		<list>
			<value>text/xml;charset=UTF-8</value>
			<value>application/xml;charset=UTF-8</value>
		</list>
			</property>
		</bean>  
		--> 
				
				<bean class="org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter" />
				<!-- 返回 json给客户端的转换器  
				 MappingJacksonHttpMessageConverter 已经过时了不要使用
				-->
				 <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
					<property name="supportedMediaTypes"> 
					<list> 
						<value>text/html;charset=UTF-8</value> 
						<value>text/plain;charset=UTF-8</value> 
                		<value>text/json;charset=UTF-8</value>
                		<value>application/json;charset=UTF-8</value>
					</list> 
					</property>				
				</bean>	 	
			</list>			
		</property>
	</bean>

其实这样的配置 我之前 一直 不太明白。。。 说明一下配置: 首先 json格式的数据配置, 客户端的请求 头的 数据格式 是怎样的,就 对应返回 json 格式的 数据。 上面的配置是 几乎所以的 客户端的请求 的数据都是返回的 json 格式的数据的。 当然不包括请求xml 了。就算是 请求头是 application/xml 返回的也是 默认json格式的。 请求是 text 即文本字符串的话,返回的也是 json 的数据的。 返回的数据 我之前一直以为 如果 返回的 是 对象的话, 返回的才是 json 数据的,响应头是application/json; 比如

@RequestMapping("save")
	@ResponseBody
	public Result save(HttpServletRequest request,

然后 还有一直 数据 叫做 字符串,, json 格式的字符串。。。,即json数据.toString 了 之前我一直以为 返回数据是 string 类型的话, 返回给客户端的就是 string 类型的 json格式的字符串。。。 比如这样。

@RequestMapping("get")
	@ResponseBody
	public String get(HttpServletRequest 

其实 这样是 错误的,,, 哪怕 返回的是 String 类型的, 但是 String 类型也是 对象啊,, 所以 返回的数据依然是 json 格式的数据的,而不是 字符串。。。 即 响应的头是 application/json; 那么来 一个小例子:

if (pplanCyclePo !=null) {
			//有数据的
			jsonObj.put("success", true);
			
			jsonObj.put("objData",JsonHelper.toJsonToDateForm(pplanCyclePo, "yyyy-MM-dd"));
//			jsonObj.put("pplanCycleId", pplanCyclePo.getId());
		}else {
			jsonObj.put("success", false);
			
		}
		return jsonObj.toString();

在 前端ajax 请求的时候 获取到的是 json 格式的数据的。 是可以 data.sucess 等等 这样来获取对应的 key 里面的数据的。 同时 如果想获取 data.objData 是 可以的, 获取到的结果是 string 类型的。。。 获取 data.objData.id 肯定是 获取不到类型的。。。 要获取 里面的 id 就要把 objData 转为 json 对象 就可以 点 出来里面的内容了。

当然 如果 json 对象 里面 objData 对应的内容放的不是 string 而是 其他对象。。。Object 那么在 前端 是可以 直接 data.objData.id 获取 内容的。

 //使用异步加载数据
        var url = _ctxPath + "/pfmcePlan/hrEffPfmcePlan/getHrEffPplanCycleTime.do";
        $.post(url, { 'id': idForPlanTime, 'monthNum': selectMonth }, function(data) {
            //绑定 表单数据,显示在form表单中, 会把id 也放到里面的了
            // 就算选择了 重置这个按钮也没有关系的, id一样是在里面的
            // 总之就不要把id 在放在from 里面了,否则后台要处理去掉 ","号
            if (data.success) {
                $("#planCyclePo").val(data.objData);
                bindFormData("hrEffPfmcePlanTimeSaveForm", data.objData);
                var objDataJSON = JSON.parse(data.objData); //必须变为json对象,才可以获取到里面的数据的
                console.log('周期时间>>>>>>>>>' + data.objData); //因为值传输是 string类型的,所以要转为json
                var id = $("#savePlanCycleId").val();
                console.log(objDataJSON.id + " , 修改周期时间的formid>>>" + id);

                if (!id) {
                    //说明 id数据不存在
                    $("#savePlanCycleId").val(objDataJSON.id);
                    console.log("赋值>>>>" + $("#savePlanCycleId").val());
                }
                $("#ytime").val($("#reportStime").val());
            } else {
                //showError("编码已存在");错误提示这里不合适
                showAlert("数据不存在"); //弹窗提示
                return;
            }



        }, "json").error(function() {
            showError("网络错误");
        });

哎。。。这就是 不看 mvc 源码的 结果了,,, 虽然可以写 代码,可是不关注原理

© 著作权归作者所有

共有 人打赏支持
之渊
粉丝 11
博文 565
码字总数 165175
作品 0
佛山
程序员
私信 提问
Servlet处理JSON字符串传输问题

前些时候做学校的实践周项目,因为功能比较简单,没有采用框架直接用Servlet实现。过程中遇到了一些问题,其中就出现了Json字符串传输问题。 1、request.getParameter()方法问题 刚开始前端通...

SuperHeroes
2018/07/08
0
0
JSON 入门指南

简介: JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互。本文将快速讲解 JSON 格式,并通过代码示例演示如何分别在客户端和服务...

红薯
2008/11/28
4.3K
7
Java个人知识点总结(基础篇)

基础篇 JDK常用的包  java.lang:这个是系统的基础类,比如String、Math、Integer、System和Thread, 提供常用功能。  java.io:这里面是所有输入输出有关的类,比如文件操作等  java.net:...

java架构
2018/11/08
0
0
java爬虫进阶篇(半小时知乎两万推荐问题)

上一篇写了一个简单的新浪新闻爬虫作为上手主要是用jsoup包来对url页面进行抓取到本地,并在本地进行数据的解析提取。这里就不重复叙述jsoup的用法了,百度一下基本一大片。看了网上大神们都...

xixi哈哈1
2017/12/31
0
0
服务器端如何判断ajax请求方式

ajax是一类http请求,自然包含请求头,和请求体。 当服务器接收到ajax请求时,为了专门给ajax返回某一种特定形式(如json)的数据,就需要知道当前请求是否是ajax请求。 由于时间的关系,这里...

IamOkay
2014/10/27
0
3

没有更多内容

加载失败,请刷新页面

加载更多

2019 年最好的 7 款虚拟私人网络服务

糟糕的数据安全会带来极大的代价,特别是对企业而言。它会大致大规模的破坏并影响你的品牌声誉。尽管有些企业可以艰难地收拾残局,但仍有一些企业无法从事故中完全恢复。不过现在,你很幸运地...

linuxCool
47分钟前
4
0
OSChina 周一乱弹 —— 加油,还有11个小时就下班了

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @_全村的希望 :吴亦凡把大碗面正儿八经做成单曲了,你别说,还挺好听 《大碗宽面》- 吴亦凡 手机党少年们想听歌,请使劲儿戳(这里) @tom_t...

小小编辑
今天
417
15
C++ vector和list的区别

1.vector数据结构 vector和数组类似,拥有一段连续的内存空间,并且起始地址不变。 因此能高效的进行随机存取,时间复杂度为o(1); 但因为内存空间是连续的,所以在进行插入和删除操作时,会造...

shzwork
今天
7
0
Spring之invokeBeanFactoryPostProcessors详解

Spring的refresh的invokeBeanFactoryPostProcessors,就是调用所有注册的、原始的BeanFactoryPostProcessor。 相关源码 public static void invokeBeanFactoryPostProcessors(Configu......

cregu
昨天
6
0
ibmcom/db2express-c_docker官方使用文档

(DEPRECIATED) Please check DB2 Developer-C Edition for the replacement. What is IBM DB2 Express-C ? ``IBM DB2 Express-C``` is the no-charge community edition of DB2 server, a si......

BG2KNT
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部