JSON(四)——异步请求中前后端使用Json格式的数据进行交互
json格式的数据广泛应用于异步请求中前后端的数据交互,本文主要介绍几种使用场景和使用方法。
一,json格式字符串
<input type="button" id="testBtn" value="测试按钮" onclick="sentAjax();"/><br>
<script type="text/javascript">
function sentAjax(){
$.ajax({
type: 'POST',
url:"<%=basePath%>/manage/test/ajax",
dataType : "json",
success: function(result){
//这里result是一个符合json格式的js对象
//alert(result.name);
//alert(result[0].name);
//alert(result.listUser[0].name); }
});
}
</script>
java代码
@RequestMapping(value = "/ajax")
public void testAjax(HttpServletRequest request, HttpServletResponse response){ try {
String jsonStr1 = "{\"name\":\"张三\",\"age\":23}";
String jsonStr2 = "[{\"name\":\"张三\",\"age\":1},{\"name\":\"李四\",\"age\":24}]";
String jsonStr3 = "{\"listUser\": [{\"name\":\"张三\",\"age\":1},{\"name\":\"李四\",\"age\":24}] }";
response.setCharacterEncoding("utf-8");//响应字符集的编码格式
response.getWriter().print(jsonStr3);
} catch (IOException e) {
e.printStackTrace();
} }
另外使用spring的@ResponseBody这个注解的话还可以这样写
@RequestMapping("/ajax")
@ResponseBody
public Object testAjax1(HttpServletRequest request, HttpServletResponse response){
String jsonStr1 = "{\"name\":\"张三\",\"age\":23}";
String jsonStr2 = "[{\"name\":\"张三\",\"age\":1},{\"name\":\"李四\",\"age\":24}]";
String jsonStr3 = "{\"listUser\": [{\"name\":\"张三\",\"age\":1},{\"name\":\"李四\",\"age\":24}] }";
return jsonStr1;
}
二,java对象
@RequestMapping(value = "/ajax")
public void testAjax2(HttpServletRequest request, HttpServletResponse response){ try {
User user = new User();
user.setName("张三");
user.setAge(23);
JSONObject jsonObject = JSONObject.fromObject(user);
response.setCharacterEncoding("utf-8");//响应字符集的编码格式
response.getWriter().print(jsonObject.toString());
} catch (IOException e) {
e.printStackTrace();
} }
使用以上的方式的话要先把java对象转换成json格式的字符串。
下面使用springmvc的@ResponseBody这个注解,也是在springmvc的web项目开发中经常用到的。
@RequestMapping(value = "/ajax")
@ResponseBody
public Object testAjax3(HttpServletRequest request, HttpServletResponse response){
User user = new User();
user.setName("张三");
user.setAge(23);
return user;
}
在这里@ResponseBody这个注解对于json格式数据的解析用到了jackson这个框架另外它对响应对象response进行了封装,这让我们在异步请求中使用json格式的数据进行数据交互更加的方便。它的实现原理如下:
@RequestMapping(value = "/ajax4")
public void testAjax4(HttpServletRequest request, HttpServletResponse response){ try {
User user = new User();
user.setName("张三");
user.setAge(23);
ObjectMapper mapper = new ObjectMapper();
String userStr = mapper.writeValueAsString(user);
response.setCharacterEncoding("utf-8");//响应字符集的编码格式
response.getWriter().print(userStr);
} catch (IOException e) {
e.printStackTrace();
} }
另外在使用json格式数据交互时如有以下用法:
@RequestMapping(value = "/ajax5")
@ResponseBody
public Object testAjax5(HttpServletRequest request, HttpServletResponse response){ Map<String,Object> jsonMap = new HashMap();
String jsonStr1 = "{\"name\":\"张三\",\"age\":23}";
jsonMap.put("json", jsonStr1); return jsonMap; }
前段应该这样写:
<script type="text/javascript">
function sentAjax(){
$.ajax({
type: 'POST',
url:"<%=basePath%>/manage/test/ajax5",
dataType : "json",
success: function(result){
//result.json取到的只是map在前端转换成json格式js对象时key为'json'对应的字符串的值,在前段json格式的字符串转换成json格式js对象推荐使用 JSON.parse()这个函数。
var jsonStr = JSON.parse(result.json);
alert(jsonStr.name)
}
});
}
</script>
最后说一点,我们作为程序员,研究问题还是要仔细深入一点的。当你对原理了解的有够透彻,开发起来也就得心应手了,很多开发中的问题和疑惑也就迎刃而解了,而且在面对其他问题的时候也可做到触类旁通。当然在开发中没有太多的时间让你去研究原理,开发中要以实现功能为前提,可等项目上线的后,你有大把的时间或者空余的时间,你大可去刨根问底,深入的去研究一项技术,为觉得这对一名程序员的成长是很重要的事情。
JSON(四)——异步请求中前后端使用Json格式的数据进行交互的更多相关文章
- 异步请求Ajax(取得json数据)
异步请求Ajax 没有学习Ajax之前请求数据的时候都是整个页面全部刷新了一次,也就是每次请求都会重新请求所有的资源.但是在很多时候不需要页面全部刷新,仅仅是需要页面的局部数据刷新即可,此时需要发送异 ...
- Json实现异步请求(提交评论)
主要将代码粘贴,通过阅读代码理解当中的相关逻辑. html代码: <form id="form1" runat="server"> <p> ...
- vue中使用axios(异步请求)和mock.js 模拟虚假数据
一.使用axios 1.安装 npm install --save axios 2.引用 import Axios from 'axios' Vue.prototype.Axios = Axios 二 ...
- vue中axios的post请求使用form表单格式发送数据
vue使用插件qs实现 (qs 是一个增加了一些安全性的查询字符串解析和序列化字符串的库.) 在jquery中的ajax的方法已将此封装,所以不需要再次序列化 1. 安装 在项目中使用命令行工具输 ...
- 异步请求获取JSON数据
json格式的数据广泛应用于异步请求中前后端的数据交互,本文主要介绍几种使用场景和使用方法. <script type="text/javascript"> funct ...
- 同步请求与异步请求Json
同步请求的返回值类型 : void : 啥也不返回 String :表示逻辑视图名 ModelAndView:该对象既有逻辑视图名,还可以携带去页面要展示的数据 同步请求:如何将controller层 ...
- vue--axios异步请求及文件目录结构分析(个人记录)
我这里使用axios进行异步加载 axios是一个库,并不是vue中的第三方插件,使用时不能通过Vue.use()安装插件,需要在原型上进行绑定,即直接在main.js中使用Vue.prototype ...
- 掌握 Ajax,第 2 部分: 使用 JavaScript 和 Ajax 发出异步请求
转http://www.ibm.com/developerworks/cn/xml/wa-ajaxintro2/ 掌握 Ajax,第 2 部分: 使用 JavaScript 和 Ajax 发出异步请求 ...
- Ajax与ashx异步请求的简单案例
Ajax与ashx异步请求的简单案例: 前台页面(aspx): <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//E ...
随机推荐
- bat脚本:windows下一键启动zookeeper+kafka
bat脚本:windows下一键启动zookeeper+kafka 把下面两行代码存为bat文件,双击执行即可.注意更改相应的目录 这里用ping来控制时间(先zookeeper,ping 4 次后 ...
- java 三种工厂模式
一.简单工厂模式 一个栗子: 我喜欢吃面条,抽象一个面条基类,(接口也可以),这是产品的抽象类. public abstract class INoodles { /** * 描述每种面条啥样的 */ ...
- [总结] 第二类Stirling数
上一道例题 我们来介绍第二类Stirling数 定义 第二类Stirling数实际上是集合的一个拆分,表示将n个不同的元素拆分成m个集合的方案数,记为 或者 .和第一类Stirling数不同的是,集合 ...
- 笔记:Spring Cloud Hystrix 封装命令
使用继承的方式来创建Hystrix 命令,不是用注解的方式来使用 Hystrix 创建 HelloGetCommand 对象,继承与 HystrixCommand 并实现 run 方法,示例如下: p ...
- 笔记:Struts2 文件上传和下载
为了上传文件必须将表单的method设置为POST,将 enctype 设置为 muiltipart/form-data,只有设置为这种情况下,浏览器才会把用户选择文件的二进制数据发送给服务器. 上传 ...
- Matplotlib库的使用
*可通过dpi修改输出质量 plot函数 第一种方法会使图中所有的字体改变,而第二种方法只会改变中文字体,推荐使用第二种方法.
- python基础学习一 字符串的相关操作
python的字符串 在python中,字符串是以unicode编码的,所以python的字符串支持多语言 对于单个字符的编码,python提供了ord()函数获取字符的整数表示,chr()函数是把编 ...
- 【Python】 用户图形界面GUI wxpython IV 菜单&对话框
更多组件 ■ 菜单栏 Menu 菜单是很多GUI必不可少的一部分.要建立菜单,必须先创建菜单栏: menuBar = MenuBar() menu = Menu() item1 = menu.Appe ...
- Loadrunner初学
1.创建脚本 启动Vvitrual User Generator 创建脚本 因为我们选择录制页面相关的操作,则选择web(HTTP/HTML) application type 选择是录制浏览器网页还 ...
- Beta第七天
听说