
!! ES6新增模板字符串 `` ,需要拼接值时使用${}包裹即可,便于字符串的拼接
1 AJAX(局部更新)
1.1 基本概念
1.AJAX(Asynchronous JavaScript And XML):异步的 JavaScript 和 XML一种新技术,而是多个技术综合。用于快速创建动态网页的技术。2.一般的网页如果需要更新内容,必需重新加载个页面。而AJAX通过浏览器与服务器进行少量数据交换,就可以使网页实现异步更新。也就是在不重新加载整个页面的情况下,对网页的部分内容进行局部更新。
同步和异步区别:同步(Synchronization)即任务顺序执行,在上一个任务未执行完成之前下一个任务等待执行。异步(Asynchronous ):CUP暂时搁置当前任务,等到主线程任务执行完成,再来响应该任务。在JS中,异步有两种,一种是setTimeout()和setInterval()函数,它们会在指定的一段事件后触发指定函数的调用。另一种是ajax异步。

1.2 原生JS实现AJAX(了解)
1.核心对象:XMLHttpRequest用于在后台与服务器交换数据。可以在不重新加载整个网页的情况下,对网页的某部分进行更新。2.打开链接:open(method,url,async)method:请求的类型 GET 或 POST。url:请求资源的路径。async:true(异步) 或 false(同步)。3.发送请求:send(String params)params:请求的参数(POST 专用)。4.处理响应:onreadystatechangereadyState:0-请求未初始化,1-服务器连接已建立,2-请求已接收,3-请求处理中,4-请求已完成,且响应已就绪。status:200-响应已全部 OK5.获得响应数据形式responseText:获得字符串形式的响应数据。responseXML:获得 XML 形式的响应数据
1.3 jQueryGET方式实现AJAX
核心语法:$.get(url,[data],[callback],[type]);url:请求的资源路径。data:发送给服务器端的请求参数,格式可以是key=value,也可以是 js 对象。callback:当请求成功后的回调函数,可以在函数中编写我们的逻辑代码。type:预期的返回数据的类型,取值可以是 xml, html, js, json, text等。
1.4 jQueryPOST方式实现AJAX
核心语法:$.post(url,[data],[callback],[type]);url:请求的资源路径。data:发送给服务器端的请求参数,格式可以是key=value,也可以是 js 对象。callback:当请求成功后的回调函数,可以在函数中编写我们的逻辑代码。type:预期的返回数据的类型,取值可以是 xml, html, js, json, text等。核心语法:$.post(url,[data],[callback],[type]);
1.5 jQuery通用方式实现AJAX(重点)
核心语法:$.ajax({name:value,name:value,…});url:请求的资源路径。async:是否异步请求,true-是,false-否 (默认是 true)。data:发送到服务器的数据,可以是键值对形式,也可以是 js 对象形式。type:请求方式,POST 或 GET (默认是 GET)。dataType:预期的返回数据的类型,取值可以是 xml, html, js, json, text等。success:请求成功时调用的回调函数。error:请求失败时调用的回调函数contentType:设置发送给服务器的数据格式,默认是application/x-www-form-urlencoded,只能处理普通的json处理,不支持嵌套json,此时可以自定义为applciation/json进行处理
window.onload = function (ev) {$("#username").blur(function () {// get/post方式/*$.post("/LoginCheckout","username="+$("#username").val(),function (data) {$("#warning").html(data);},"text");*/// 通用方式$.ajax({url: "/LoginCheckout",async:true,data:"username="+$("#username").val(),type:"post",dataType:"text", // 特别注意dataType中Type首字母是大写的success:function (data) {$("#warning").html(data);},error:function () {alert("请求失败");}});});};
1.6 异步前后端交互流程

2 JSON处理
2.1 创建格式
| 类型 | 语法 | 说明 |
|---|---|---|
| 对象类型 | {name:value,name:value,...} | name是字符串类型,value可以是任意类型 |
| 数组/集合类型 | [{name:value,...},{name:value,...}] | |
| 混合类型 | {name:[{name:value,...},{name:value,...}]} |
2.2 JSON转换工具
1.Jackson:开源免费的JSON转换工具,SpringMVC转换默认使用Jackson.
2.可以将JAVA对象或集合转换为JSON格式的字符串,也可以将JSON格式的字符串转成JAVA对象
常用类
ObjectMapper // Jackson工具包的核心类,提供一些方法来实现JSON字符串和对象之间的转换TypeReference // 对集合泛型的反序列化,使用TypeReference明确指定反序列化的对象类型
常用方法
String writeValueAsString(Object obj) // 将JAVA对象转换成JSON字符串<T> readValue(String json,Class<T> valueType) // 将JSON字符串转换成Java对象<T> readValue(String json,TypeReference valueTypeRef) // 将JSON字符串转换成Java对象
2.3 JSON使用的注意事项
2.3.1 JSON转换工具使用步骤
1.导入相关JAR包jackson-annotations.jarjackson-core.jarjackson-databind.jar2.创建ObjectMapper对象ObjectMapper objectMapper = new ObjectMapper();3.对自定义类进行JSON格式转换String user = objectMapper.writeValueAsString(new User("张三","123"));4.JSON转换为自定义类User us = objectMapper.readValue(user,User.class);
2.3.2 JSON转换工具使用场景
1.将对象转换为JSON格式时都使用writeValueAsString方法,参数均为要转换的对象名称2.将JSON格式转换为对象时需要注意:(1)若转换的对象中包含自定义类时,readValue中传递的第二个参数需要为TypeReference的实现类,泛型写上转换的对象的类型,{}中为空实现即可示例:Map<String, User> map2 = new HashMap<>();map2.put("一班",new User("张三", "23"));map2.put("二班",new User("李四", "25"));String s2 = objectMapper.writeValueAsString(map2);System.out.println(s2);HashMap<String, User> value = objectMapper.readValue(s2, new TypeReference<HashMap<String, User>>(){});System.out.println(value);
2.3.3 JSON数据的两种访问格式
json格式数据的key值访问方式1.对象.key例:rtn.message2.对象[key]例:rtn[‘message’]
3 分页效果实现
3.1实现原理
java:(1)Page中封装的是从数据库中查询出的数据,以json字符串的格式进行存储(但不属于json,使用ObjectMapper进行转换)(2)PageInfo中封装的是分页的所有信息,包括总页数,总条数,当前页数,数据中查询数据等,数据中查询数据使用list键进行标识,pages为总页数的键名称,pageNum为当前页数的键名称html+jquery;(1)瀑布流实现分页时,通过服务器传递过来的数据data获取从数据库中查询出来的信息,例如data[0].title即表示数据库中title列的第一条数据的信息(2)按钮实现分页时,通过服务器传递过来的数据data获取从数据库中查询出来的信息,例如data.list[0].title即表示data中list中的title值,即数据库中title列的第一条数据的信息,按钮实现分页属于一种模板代码,导入jquery.simplePagination.js文件后进行如下配置即可使用:html:<!--分页插件的标签元素的固定模板--><div class="content"><div class="pagination-holder clearfix"><div id="light-pagination" class="pagination"></div></div></div>jquery:$("#light-pagination").pagination({// 为分页按钮区域设置总页数,paggeInfo即为服务器返回的PageInfo数据pages:pageInfo.pages,// 为分页按钮区域设置当前页数,paggeInfo即为服务器返回的PageInfo数据currentPage:pageInfo.pageNum});//为分页按钮绑定单击事件,完成上一页下一页查询功能$("#light-pagination .page-link").click(function () {//获取点击按钮的文本内容let page = $(this).html();//如果点击的是Prev,调用查询方法,查询当前页的上一页数据if(page == "Prev") {queryByPage(pageInfo.pageNum - 1,pageSize);}else if (page == "Next") {//如果点击的是Next,调用查询方法,查询当前页的下一页数据queryByPage(pageInfo.pageNum + 1,pageSize);} else {//调用查询方法,查询当前页的数据queryByPage(page,pageSize);}});
3.2 瀑布流分页效果实现
3.2.1 高度获取方法
页面加载事件:$(function(){})获取浏览器可视区(当前窗口)宽度高度$(window).width(); // $(window获取当前窗口对象)$(window).height();获取滚动条上下/左右滚动距离$(window).scrollTop();$(window).scrollLeft();获取页面文档的宽度高度$(document).width();$(document).height();// jQuery(window).height()代表了当前可见区域的大小// jQuery(document).height()则代表了整个文档的高度获取页面滚动距离$(document).scrollTop();$(document).scrollLeft();滚动条滚动事件$(window).scroll(function(){......})$('html,body').animate({'scrollTop':0})
3.2.2 JS代码实现
//定义发送请求标记var send = true;//定义当前页码和每页显示的条数var start = 1;var pageSize = 10;//设置页面加载事件$(function () {//为当前窗口绑定滚动条滚动事件$(window).scroll(function () {//计算当前展示数据是否浏览完毕//当 滚动条距底部的距离 + 当前滚动条滚动的距离 + 当前窗口的高度 >= 当前文档的高度if((1 + $(window).scrollTop() + $(window).height()) >= $(document).height() && send == true) {//将请求标记置为false,当前异步操作完成前,不能重新发起请求。send = false;//根据当前页和每页显示的条数来 请求查询分页数据//加载动图显示$(".loading").show();//发起AJAX请求$.ajax({//请求的资源路径url:"newsServvar",//请求的参数data:{"start":start,"pageSize":pageSize},//请求的方式type:"POST",//响应数据形式dataType:"json",//请求成功后的回调函数success:function (data) {if(data.length == 0) {$(".loading").hide();$("#no").html("我也是有底线的...");return;}//加载动图隐藏$(".loading").hide();//将数据显示var titles = "";for(var i = 0; i < data.length; i++) {titles += "<li>\n" +" <div class=\"title-box\">\n" +" <a href=\"#\" class=\"link\">\n" +data[i].title +" <hr>\n" +" </a>\n" +" </div>\n" +" </li>";}//显示到页面$(".news_list").append(titles);//将请求标记设置为truesend = true;}});//当前页码+1start++;}});});
3.3 按钮分页效果实现(了解)
//定义当前页码和每页显示的条数let start = 1;let pageSize = 10;//调用查询数据的方法queryByPage(start,pageSize);//定义请求查询分页数据的函数,发起AJAX异步请求,将数据显示到页面function queryByPage(start,pageSize) {$.ajax({//请求的资源路径url:"newsServlet2",//请求的参数data:{"start":start,"pageSize":pageSize},//请求的方式type:"POST",//响应数据形式dataType:"json",//请求成功后的回调函数success:function (pageInfo) {//将数据显示到页面let titles = "";for(let i = 0; i < pageInfo.list.length; i++) {titles += "<li>\n" +" <div class=\"title-box\">\n" +" <a href=\"#\" class=\"link\">\n" +pageInfo.list[i].title +" <hr>\n" +" </a>\n" +" </div>\n" +" </li>";}$(".news_list").html(titles);//为分页按钮区域设置页数参数(总页数和当前页)$("#light-pagination").pagination({pages:pageInfo.pages,currentPage:pageInfo.pageNum});//为分页按钮绑定单击事件,完成上一页下一页查询功能$("#light-pagination .page-link").click(function () {//获取点击按钮的文本内容let page = $(this).html();//alert(page);//如果点击的是Prev,调用查询方法,查询当前页的上一页数据if(page == "Prev") {queryByPage(pageInfo.pageNum - 1,pageSize);}else if (page == "Next") {//如果点击的是Next,调用查询方法,查询当前页的下一页数据queryByPage(pageInfo.pageNum + 1,pageSize);} else {//调用查询方法,查询当前页的数据queryByPage(page,pageSize);}});}});}
文章转载自是汐江呀,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




