Ajax
1.
什么是Ajax?
- ASynchronous JavaScript And XML 异步的JavaScript 和 XML
(掌握)
2.
异步(默认)和同步
- ①. 客户端和服务器端相互通信的基础上,(true为异步,默认异步,false为同步)
- ②. 同步:服务器在处理请求的过程中,浏览器必须等待服务器响应
- ③. 异步:服务器在处理请求的过程中,浏览器不需要等待服务器响应(异步特点:局部刷新,数据传输量小,用户体验好!)
3.
Ajax的应用场景
- Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术
- 百度的搜索框、用户注册时(校验用户是否被注册过)、分页
4.原生的JS的实现方式(了解)
//1.创建核心对象 var xmlhttp; if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } //2. 建立连接 /* 参数: 1. 请求方式:GET、POST * get方式,请求参数在URL后边拼接。send方法为空参 * post方式,请求参数在send方法中定义 2. 请求的URL: 3. 同步或异步请求:true(异步)或 false(同步) */ xmlhttp.open("GET","ajaxServlet?username=tom",true); //3.发送请求 xmlhttp.send(); //4.接受并处理来自服务器的响应结果 //获取方式 :xmlhttp.responseText //什么时候获取?当服务器响应成功后再获取 //当xmlhttp对象的就绪状态改变时,触发事件onreadystatechange。 xmlhttp.onreadystatechange=function() { //判断readyState就绪状态是否为4,判断status响应状态码是否为200 if (xmlhttp.readyState==4 && xmlhttp.status==200) { //获取服务器的响应结果 var responseText = xmlhttp.responseText; alert(responseText); } }
5.
JQuery实现方式(掌握)
1>.
$.ajax(({键值对});
- data:{ }中的数据是josn格式 ; success:function(data){ } data是服务器给浏览器返回的结果
$.ajax({ url:"/jquerytest/ajaxServlet",//要请求服务区url type:"POST",//请求方式 async:true,//是否是异步请求;true: false: dataType:"json",//服务器返回的数据是什么类型 //这是一个对象,它表示请求参数;两个参数一个是method=ajax;val=xxx //服务区端可以通过request.getParameter()获取 data:{val:value}, //data: "username=jack&age=23",//请求参数 //data:{"username":"jack","age":23}, cache:false,//是否缓冲结果 beforeSend:function () { }//执行前会调用的方法 success:function(result){//这个函数会在服务器执行成功时被调用,参数result就是服务器返回的值 } error:function(){}//表示如果请求响应出现错误,会执行的回调函数 });
2>.
$.get():发送get请求
- 语法:
$.get(url, [data], [callback], [type])
* 参数: * url:请求路径 * data:请求参数 * callback:回调函数 * type:响应结果的类型
3>.
$.post():发送post请求
- 语法:
$.post(url, [data], [callback], [type])
* 参数: * url:请求路径 * data:请求参数 * callback:回调函数 * type:响应结果的类型
JSON
1.什么是JSON(用来存储数据)
- 概念:是一种轻量级数据传输的格式,跟平台跟语言无关 [ JavaScript Object Notation(JavaScript对象表示法)]
Person p = new Person(); p.setName("张三"); p.setAge(23); p.setGender("男"); var p = {"name":"张三","age":23,"gender":"男"}; * json现在多用于存储和交换文本信息的语法 * 进行数据的传输 * JSON 比 XML 更小、更快,更易解析。
2.
语法
1>.
基本规则
- ①. 键用引号(单双都行)引起来,也可以不使用引号
- ②. 值得取值类型:
- ③. 数据由逗号分隔:多个键值对由逗号分隔
- ④. 花括号保存对象:使用{}定义json 格式
- ⑤. 方括号保存数组:[ ]
2>.
获取数据
- ①. json对象.键名
- ②. json对象[“键名”]
- ③. 数组对象[索引]
- ④. 遍历
//1.定义基本格式 var person = {"name": "张三", age: 23, 'gender': true}; var ps = [{"name": "张三", "age": 23, "gender": true}, {"name": "李四", "age": 24, "gender": true}, {"name": "王五", "age": 25, "gender": false}]; //获取person对象中所有的键和值 //for in 循环 /* for(var key in person){ //这样的方式获取不行。因为相当于 person."name" //alert(key + ":" + person.key); //key默认是字符串 alert(key+":"+person[key]); }*/ //获取ps中的所有值 for (var i = 0; i < ps.length; i++) { var p = ps[i]; for(var key in p){ alert(key+":"+p[key]); } }
3.
JSON和Java对象的相互转换
- 常见的JSON解析器:Jsonlib,Gson,fastjson,jackson(SpringMvc内置解析器)
1>. Json转为Java对象
2>.
Java对象转换Json
- ①.
void writeValue(参数1,obj);
- ②.
String writeValueAsString(obj):
将对象转为json字符串
@Test public void fun1() throws Exception{ //Java对象转为Json字符串 //1.创建几个Person对象 Person p=new Person(); p.setName("张三"); p.setAge(23); p.setGender("男"); //2.创建Jackson的核心对象,ObjectMapper ObjectMapper mapper=new ObjectMapper(); //3.调用方法转换 /* 转换方法: writeValue(参数1,obj); 参数1: File:将obj对象转换为JSON字符串,并保存到指定的文件中 Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中 OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中 writeValueAsString(obj):将对象转为json字符串 * */ String string = mapper.writeValueAsString(p); System.out.println(string);//{"name":"张三","age":23,"gender":"男"} }
- ③. @JsonIgnore:排除属性 @JsonFormat:属性值格式化
3>.
集合:数组的格式
- [{“id”:1,“username”:“小智”},{“id”:2,“username”:“小幸”},{“id”:3,“username”:“洋洋”}]
4>.
Map:对象格式一致
4.
案列
- 校验用户名是否存在
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>注册页面</title> </head> <body> <form action=""> <input type="text" id="username" name="username" placeholder="请输入用户名"/> <span id="s_username"></span> <input type="password" name="password" placeholder="请输入密码"/> <input type="submit" value="注册"/> </form> <script src="jq/jquery-1.11.0.min.js"></script> <script> $(function () { //给username绑定一个blur $("#username").blur(function () { //获取username文本输入框的值 var val = $(this).val(); //发送ajax请求 $.get("/findUserServlet",{username:val},function (data) { alert(data); //期望服务器响应回的数据格式是: // { "userExist":true,"msg":"此用户名太受欢迎,请更换一个" } // { "userExist":false,"msg":"用户名可用" } //判断userExist键的值是否是true if(data.userExist){ //用户名存在 //设置样式 $("#s_username").css("color","red"); $("#s_username").html(data.msg); }else{ //用户名不存在 $("#s_username").css("color","green"); $("#s_username").html(data.msg); } }/*,"json"*/); }); }); </script> </body> </html>
@WebServlet("/findUserServlet") public class FindUserServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //浏览器告诉服务器要用什么类型的数据去接收 response.setContentType("application/json;charset=utf-8"); //1.获取用户名 String username=request.getParameter("username") ; //2.调用service层判断用户名是否存在 // { "userExist":true,"msg":"此用户名太受欢迎,请更换一个" } // { "userExist":false,"msg":"用户名可用" } Map<String,Object> map=new HashMap<>(); if ("tom".equals(username)){ //用户名存在 map.put("userExist",true); map.put("msg","此用户名太受欢迎,请更换一个"); }else{ //用户名不存在 map.put("userExist",false); map.put("msg","用户名可用"); } //将map转为json,并且传递给客户端浏览器 ObjectMapper mapper=new ObjectMapper(); //数据传递给客户端浏览器 mapper.writeValue(response.getWriter(),map); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } }