前端学习记录 Day6(Ajax) 曾经终败给现在 2021-11-10 04:48 341阅读 0赞 ### 文章目录 ### * Day 6 * 前导知识 * 简介 * 作用 * 伪实现 * 实现 * 使用Spring MVC实现 * * 返回集合 * 注册提示 # Day 6 # 2019年8月2日。 这是我学习前端的第六天。 这一天,我学到了以下的知识。 # 前导知识 # 学习Ajax,需要掌握的知识如下: * Spring MVC * Controller * Spring MVC配置文件 * web.xml * JavaScript * 引入JavaScript,`<script>` * 函数 * 选择器 * 标签选择器 * 类选择器 * **id选择器** * jQuery公式 * $(选择器).事件(参数) * $(select).action(…) # 简介 # **AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。** AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。 **Ajax 不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用程序的技术。** 在 2005 年,Google 通过其 Google Suggest 使 AJAX 变得流行起来。 Google Suggest 使用 AJAX 创造出动态性极强的 web 界面:当您在谷歌的搜索框输入关键字时,JavaScript 会把这些字符发送到服务器,然后服务器会返回一个搜索建议的列表。 就和国内百度的搜索框一样: ![在这里插入图片描述][20190802145012491.png] # 作用 # * 传统的网页(即不用ajax技术的网页),想要更新内容或者提交一个表单,都需要重新加载整个网页。 * 使用ajax技术的网页,通过在后台服务器进行少量的数据交换,就可以实现异步局部更新。 * 使用Ajax,用户可以创建接近本地桌面应用的直接、高可用、更丰富、更动态的Web用户界面。 * 注册时,输入用户名自动检测用户是否已经存在。 * 登陆时,提示用户名密码错误 * 删除数据行时,将行ID发送到后台,后台在数据库中删除,数据库删除成功后,在页面DOM中将数据行也删除。 # 伪实现 # 1. 运用iframe标签,可以伪造出ajax的样子,代码如下: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>abc</title> </head> <body> <script type="text/javascript"> window.onload = function(){ var myDate = new Date(); document.getElementById('currentTime').innerText = myDate.getTime(); }; function LoadPage(){ var targetUrl = document.getElementById('url').value; console.log(targetUrl); document.getElementById("iframePosition").src = targetUrl; } </script> <div> <p>请输入要加载的地址:<span id="currentTime"></span></p> <p> <input id="url" type="text" value="https://www.baidu.com/"/> <input type="button" value="提交" onclick="LoadPage()"> </p> </div> <div> <h3>加载页面位置:</h3> <iframe id="iframePosition" style="width: 100%;height: 500px;"></iframe> </div> </body> </html> 1. 该页面实现了在输入框中输入任意网址,下面的界面则会出现那个网址,结果如图: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMTUxNjU5_size_16_color_FFFFFF_t_70] # 实现 # Ajax的核心是**XMLHttpRequest对象(XHR)**。XHR为向服务器发送请求和解析服务器响应提供了接口。能够以异步方式从服务器获取新数据。 jQuery 提供多个与 AJAX 有关的方法。 通过 jQuery AJAX 方法,就能够使用 HTTP Get 和 HTTP Post 从远程服务器上请求文本、HTML、XML 或 JSON – 同时能够把这些外部数据直接载入网页的被选元素中。 jQuery 不是生产者,而是搬运工。 **jQuery Ajax本质就是 XMLHttpRequest**,对其进行了封装,方便调用!相关方法如下所示: 1. jQuery.get(...) 所有参数: url: 待载入页面的URL地址 data: 待发送 Key/value 参数。 success: 载入成功时回调函数。 dataType: 返回内容格式,xml, json, script, text, html 2.jQuery.post(...) 所有参数: url: 待载入页面的URL地址 data: 待发送 Key/value 参数 success: 载入成功时回调函数 dataType: 返回内容格式,xml, json, script, text, html 3.jQuery.getJSON(...) 所有参数: url: 待载入页面的URL地址 data: 待发送 Key/value 参数。 success: 载入成功时回调函数。 4.jQuery.getScript(...) 所有参数: url: 待载入页面的URL地址 data: 待发送 Key/value 参数。 success: 载入成功时回调函数。 5.jQuery.ajax(...) 部分参数: url:请求地址 type:请求方式,GET、POST(1.9.0之后用method) headers:请求头 data:要发送的数据 contentType:即将发送信息至服务器的内容编码类型(默认: "application/x-www-form-urlencoded; charset=UTF-8") async:是否异步 timeout:设置请求超时时间(毫秒) beforeSend:发送请求前执行的函数(全局) complete:完成之后执行的回调函数(全局) success:成功之后执行的回调函数(全局) error:失败之后执行的回调函数(全局) accepts:通过请求头发送给服务器,告诉服务器当前客户端课接受的数据类型 dataType:将服务器端返回的数据转换成指定类型 "xml": 将服务器端返回的内容转换成xml格式 "text": 将服务器端返回的内容转换成普通文本格式 "html": 将服务器端返回的内容转换成普通文本格式,在插入DOM中时,如果包含JavaScript标签,则会尝试去执行。 "script": 尝试将返回值当作JavaScript去执行,然后再将服务器端返回的内容转换成普通文本格式 "json": 将服务器端返回的内容转换成相应的JavaScript对象 "jsonp": JSONP 格式使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数 做个简单的测试,使用最原始的HttpServletResponse处理 , 实现步骤如下所示: 1. 导入jQuery包,放入webapp/statics/js目录下,如图所示: ![在这里插入图片描述][20190802150537338.png] 2. 编写一个AjaxController,代码如下: import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @Controller @RequestMapping("/ajax") public class AjaxController { @RequestMapping("/a1") public void ajax1(String name , HttpServletResponse response) throws IOException { if ("admin".equals(name)){ response.getWriter().print("true"); }else{ response.getWriter().print("false"); } } } 1. 编写index.jsp测试,代码如下: <%@ page contentType="text/html;charset=UTF-8" language="java" %> <head> <title>ajax</title> <script src="${pageContext.request.contextPath}/statics/js/jquery-3.4.1.js"></script> <script> /* jQuery.post(...) 所有参数: url: 待载入页面的URL地址 (必填) data: 待发送 Key/value 参数 success: 载入成功时回调函数 data:请求返回的数据 status:请求返回的状态 */ function a1(){ $.post({ url:"${pageContext.request.contextPath}/ajax/a1", data:{ 'name':$("#txtName").val()}, success:function (data,status) { alert(data); alert(status); } }); } </script> </head> <body> <%--onblur:失去焦点触发事件--%> 用户名:<input type="text" id="txtName" onblur="a1()"/> </body> 1. 123 # 使用Spring MVC实现 # ## 返回集合 ## 1. 修改AjaxController,代码如下: @RequestMapping("/a2") @ResponseBody public List<User> ajax2(){ List<User> list = new ArrayList<User>(); list.add(new User("秦疆1号",3,"男")); list.add(new User("秦疆2号",3,"男")); list.add(new User("秦疆3号",3,"男")); return list; 由于@ResponseBody注解,将list转成json格式返回 } 1. 编写前端页面index2.jsp,代码如下: <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <input type="button" id="btn" value="获取数据"/> <table width="80%" align="center"> <tr> <td>姓名</td> <td>年龄</td> <td>性别</td> </tr> <tbody id="content"> </tbody> </table> <script src="${pageContext.request.contextPath}/statics/js/jquery-3.4.1.min.js"></script> <script> $(function () { $("#btn").click(function () { $.post("${pageContext.request.contextPath}/ajax/a2",function (data) { console.log(data) var html=""; for (var i = 0; i <data.length ; i++) { html+= "<tr>" + "<td>" + data[i].name + "</td>" + "<td>" + data[i].age + "</td>" + "<td>" + data[i].sex + "</td>" + "</tr>" } $("#content").html(html); }); }) }) </script> </body> </html> 1. 运行,点击“获取数据”按钮,即会加载出Controller返回的数据,结果如下: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMTUxNjU5_size_16_color_FFFFFF_t_70 1] ## 注册提示 ## 实现模拟注册时,在框的后面会有提示的文字 1. 修改AjaxController,代码如下: @RequestMapping("/a3") @ResponseBody public String ajax3(String name,String pwd){ String msg = ""; //模拟数据库中存在数据 if (name!=null){ if ("admin".equals(name)){ msg = "OK"; }else { msg = "用户名输入错误"; } } if (pwd!=null){ if ("123456".equals(pwd)){ msg = "OK"; }else { msg = "密码输入有误"; } } return msg; //由于@ResponseBody注解,将msg转成json格式返回 } 1. 编写前端页面regx.jsp,代码如下: <html> <head> <title>ajax</title> <script src="${pageContext.request.contextPath}/statics/js/jquery-3.4.1.min.js"></script> <script> function a1(){ $.post({ url:"${pageContext.request.contextPath}/ajax/a3", data:{ 'name':$("#name").val()}, success:function (data) { if (data.toString()=='OK'){ //学习链接:https://www.w3school.com.cn/jquery/css_css.asp $("#userInfo").css("color","green"); }else { $("#userInfo").css("color","red"); } $("#userInfo").html(data); } }); } function a2(){ $.post({ url:"${pageContext.request.contextPath}/ajax/a3", data:{ 'pwd':$("#pwd").val()}, success:function (data) { if (data.toString()=='OK'){ $("#pwdInfo").css("color","green"); }else { $("#pwdInfo").css("color","red"); } $("#pwdInfo").html(data); } }); } </script> </head> <body> <p> 用户名:<input type="text" id="name" onblur="a1()"/> <span id="userInfo"></span> </p> <p> 密码:<input type="text" id="pwd" onblur="a2()"/> <span id="pwdInfo"></span> </p> </body> </html> 1. 运行,会有动态请求响应的效果,并且会局部刷新,结果如下: ![在这里插入图片描述][20190802153630830.png] [20190802145012491.png]: /images/20211109/b09e326ef3604661abcffddc93efeb36.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMTUxNjU5_size_16_color_FFFFFF_t_70]: /images/20211109/d454ae5bbc66426b8f7520f9e48e9c6a.png [20190802150537338.png]: /images/20211109/282c78ea8aec4224a16b92b9f4f4b52b.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMTUxNjU5_size_16_color_FFFFFF_t_70 1]: /images/20211109/055824495d8a44d082c8d5cde36b2774.png [20190802153630830.png]: /images/20211109/6cf9dfae43ec4f5a818f86de459ccbb7.png
相关 前端学习记录 Day2(CSS) 文章目录 Day 2 初识CSS CSS美化网页 盒子模型 浮动 定位网页元素 C 逃离我推掉我的手/ 2022年10月02日 01:48/ 0 赞/ 210 阅读
相关 前端开发学习Day6 今天还是继续做了昨天没有做完的网页,依然没有做完,可能对于零基础的人来说,理解和操作真的是有很大的差距,进度慢其实挺着急的,估计明天还要花一天的时间才能把这个网页做好。以下是今 梦里梦外;/ 2022年10月01日 05:42/ 0 赞/ 122 阅读
相关 Python学习记录day6-反射、常用模块 Python学习记录day6-反射、常用模块 @(学习)\[python\] Python学习记录day6-反射常用模块 反射 常用模块 系统管理员/ 2022年07月14日 09:38/ 0 赞/ 313 阅读
相关 前端学习记录 Day1(Html) 文章目录 Day 1 HTML简介 HTML基本结构 网页的基本标签 图像标签 链接标签 ╰半夏微凉°/ 2022年01月21日 10:11/ 0 赞/ 267 阅读
相关 前端学习记录 Day4(jQuery) 文章目录 Day 4 jQuery简介 jQuery特点 jQuery导入 jQuery语言基础 雨点打透心脏的1/2处/ 2022年01月05日 09:37/ 0 赞/ 251 阅读
相关 前端学习记录 Day3(JavaScript) 文章目录 Day 3 JavaScript基础 操作BOM对象 操作DOM对象 面向对象 Day 3 忘是亡心i/ 2022年01月05日 08:21/ 0 赞/ 273 阅读
相关 前端学习记录 Day7(Vue) 文章目录 Day 7 前导知识 前端的三大框架 React AugularJS Vue.js Vue入门 朴灿烈づ我的快乐病毒、/ 2021年11月11日 18:26/ 0 赞/ 357 阅读
相关 Spring学习记录 Day6(Spring MVC拓展) 文章目录 Day 6 文件上传 前导知识 准备工作 代码实现 文件下载 实现思路 代码 向右看齐/ 2021年11月10日 13:22/ 0 赞/ 275 阅读
相关 前端学习记录 Day5(JSON) 文章目录 Day 5 简介 语法 JSON键值对 JSON和Js对象的关系 JSON 和 JS 对象互转 今天药忘吃喽~/ 2021年11月10日 05:02/ 0 赞/ 376 阅读
相关 前端学习记录 Day6(Ajax) 文章目录 Day 6 前导知识 简介 作用 伪实现 实现 使用Spring MVC实现 返回集合 注册 曾经终败给现在/ 2021年11月10日 04:48/ 0 赞/ 342 阅读
还没有评论,来说两句吧...