AJAX

第一章:AJAX基础

概念:AJAX = Asynchronous JavaScript And XML(异步的 JavaScript 和 XML)。阿贾克斯

AJAX 不是新的编程语言,而是一种使用现有标准的新方法。

AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下。简言之:是局部刷新技术。异步刷新。

回顾历史:

  • Web 1.0 sina sohu 用户被动接受新闻
  • Web 2.0 社区,web群 互动 环节增加,用户和服务器交互
  • Web 3.0 自媒体,突出客户的实现,客户也可以成为中心,其他人订阅 参与 讨论等
  • Web 4.0 物联网时代 自媒体 人 服务器 +机器交互,机器本身也是参与者。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b2zn4Crx-1595717644137)(E:\政通路\课堂笔记\S2\Ajax\assets\image-20200509143743804.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M9fByRhC-1595717644139)(E:\政通路\课堂笔记\S2\Ajax\assets\image-20200509143807384.png)]

1.Ajax核心 XMLHttpRequest

所有现代浏览器均支持 XMLHttpRequest 对象(IE5 和 IE6 使用 ActiveXObject)。

XMLHttpRequest 用于在后台与服务器交换数据。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

1.1 对象的创建

let xmlhttp;
if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safarixmlhttp=new XMLHttpRequest();}
else{// code for IE6, IE5xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}

1.2 对象的方法

method:http请求的方法有俩get/post,选择就是get/post。

url:就是View层的页面要提交到服务器的请求,一般是Servlet

async:true:异常请求;false:同步请求

异步请求:效率、性能更高;

同步请求:会导致网络卡顿|网页无响应的现象、页面冻结。

方法 描述
open(method,url,async) 创建一个请求
send(string) 将请求发送到服务器。 string:仅用于 POST 请求

1.3 onreadystatechange 事件

当请求被发送到服务器时,我们需要执行一些基于响应的任务。

每当 readyState 改变时,就会触发 onreadystatechange 事件。

readyState 属性存有 XMLHttpRequest 的状态信息。

下面是 XMLHttpRequest 对象的三个重要的属性:

属性 描述
onreadystatechange 存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。
readyState 存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。 0: 请求未初始化 1: 服务器连接已建立 2: 请求已接收 3: 请求处理中 4: 请求已完成,且响应已就绪
status 200: "OK"404: 未找到页面;500:服务器问题

1.4 服务器的响应

如需获得来自服务器的响应,请使用 XMLHttpRequest 对象的 responseText 或 responseXML 属性。

属性 描述
responseText 获得字符串形式的响应数据。
responseXML 获得 XML 形式的响应数据。

2.使用步骤

如何使用ajax,使用有两种:一种是前端的纯粹的使用,node+ajax;一种是后台的,我们关注的是后台。

我们之前增加用户的时候,假设用户名(账户)不能重复,我们之前是没有判断的。

当数据库服务器存在某用户的时候,文本框离开,则报已经存在该用户了;否则,显示可以注册。

  • 创建XMLHttpRequest对象
  • 设置请求信息open(get|post,url,true|false)
  • 向服务器发送请求
  • 让XmlHttpRequest对象接受服务器的响应数据,通过创建的回调函数
  • 编写服务器端处理客户端请求
步 骤 请求方式 实 现 代 码
初始化组件 GET xmlHttpRequest.open( “GET”,url, true );
POST xmlHttpRequest.open( “POST”,url, true ); xmlHttpRequest.setRequestHeader( “Content-Type”, “application/x-www-form-urlencoded” );
发送请求 GET xmlHttpRequest.send( null );
POST xmlHttpRequest.send(“key=xxx&type=12&year=2016” );

get代码实现:

 //1.创建XmlHttpRequest对象,封装一下,封装到一个函数;function createXhr() {if(window.XMLHttpRequest)return new XMLHttpRequest();//如果有,则创建其对象;elsereturn new ActiveXObject("Microsoft.XMLHTTP");}//2.开始实现我们的目标;离开的事件是blur$(function () {//离开的时候,先判断一下;用户名不能为空,实际上应该是正则验证;$("#name").blur(function () {let name=$("#name").val();if(name==null||name==''){//后续使用正则实现$("#nameinfo").html("用户不能为空!").addClass("nameinfo");/*刚才的错误是style里面加了一个html的注释,亏!!!*/}else{//否则,就是输入的不是空了,有值,那这个值就要看看是否存在于数据库了。//2.1 这时候要得到XmlHttpRequest对象;xhr=createXhr();//2.2设置请求行open,请求后台的Servlet,客户端向服务器发送了一个参数name,值namexhr.open("get","userServletByName?name="+name,true);//2.3.发送请求,get的时候不加东西;xhr.send(null);//2.4当事件改变Ok的时候,响应的函数;xhr.onreadystatechange=function () {//readyState==4;并且状态为200的时候,才OK。if(xhr.readyState==4 && xhr.status==200){//定义变量data,接受异步对象xhr的服务器的响应数据;由Servlet来返回let data=xhr.responseText;console.log(data);//暂停一下;//下面就是根据data响应的数据值做出判断;//服务器端响应给我们,true|false了.data-->文本;我们把它当成了booleanif(data=='true'){$("#nameinfo").html("用户名已经注册").addClass("nameinfo");}else{$("#nameinfo").html("用户名可以注册");$("#nameinfo").css("color","green");}}}}});})

post代码实现:

修改get的2. 3.步骤即可;

 //2.2设置请求行open,请求后台的Servlet,客户端向服务器发送了一个参数name,值name//xhr.open("get","userServletByName?name="+name,true);xhr.open("post","userServletByName",true);xhr.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" ); //必须有;//2.3.发送请求,get的时候不加东西;//xhr.send(null);get 没东西;xhr.send("name="+name);

问题:

1.[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6K4fNd27-1595717644143)(E:\政通路\课堂笔记\S2\Ajax\assets\image-20200509155731042.png)]

//向客户端发响应,编码要一致;response.setContentType("text/html;charset=UTF-8");response.setCharacterEncoding("UTF-8");

2.出来2行的问题是需要加判断,并且&&符号;

 if(xhr.readyState==4 && xhr.status==200){代码}

总结一下:

1.了解异步对象XmlHttpRequest

2.了解其四大步骤;

3.通过javaweb代码来实践一下。这个是重点,看视频,一步一步走;

第二章 jQuery实现Ajax

传统方式实现Ajax的不足

  • 步骤繁琐
  • 方法、属性、常用值不好记忆
  • 处理复杂数据(如XML)比较麻烦
  • 浏览器兼容问题

jQuery Ajax将Ajax相关操作进行了封装。$.ajax() 方法通过 HTTP 请求加载远程数据。

该方法是 jQuery 底层 AJAX 实现。简单易用的高层实现见 $.get(), .post()等。.post() 等。.post()等。.ajax() 返回其创建的 XMLHttpRequest 对象。

.ajax()它包括:.ajax()它包括:.ajax()它包括:.get(),$.post()

2.1 语法格式

();小括号里面包括了{}。

在{}里面,写了type,url,data,success,dataType这样几个key关键字的,给这几个关键字赋值的时候,使用的是:"值"的方式。

$.ajax({

type: ‘POST’, //请求方式,默认为get

url: url ,

data: data ,

success: success ,

dataType: dataType

});

参数

参数 描述
url 必需。规定把请求发送到哪个 URL,Servlet|Controller
data 可选。映射或字符串值。规定连同请求发送到服务器的数据,客户端向服务器的数据
success(result, textStatus, jqXHR) 可选。请求成功时执行的回调函数。
dataType 可选。规定预期的服务器响应的数据类型。 默认执行智能判断(xml、json、script 或 html)。

昨天else之后的代码替换:

 $.ajax({type:"get",url:"userServletByName",//data:"name="+name, //是客户端向服务器的请求数据//按照json格式传递;data:{"name":name},  //""里面的是key,不带"的是value。datatype:"text",success:function(result) {   //成功的时候,执行的匿名函数;对比昨天的onreadyStatechangeconsole.log(result);if(result=='true'){$("#nameinfo").html("用户名已经注册").addClass("nameinfo");}else{$("#nameinfo").html("用户名可以注册").addClass("gre");}}});

代码量非常简练。

第三章 JSON

概念:是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据。英文:JavaScript Object Notation

3.1语法格式

{key1:value1, key2:value2, …} 的键值对结构,当值为字符串的时候,需要使用"",引起来。

let str={“name”:“张三”,“age”:18,“address”:“河南郑州”}

json数组,数组的格式:

[],这个[]里面放多个{}对象或字符串

[

​ {}, 这些都是json格式

​ {},

​ {}

]

json对象读取:

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>ajax</title><script src="js/jquery-1.12.4.min.js"></script><script>//1.定义一个简单的json对象//这个json对象,前面的key,id name  age,这些是不是数据库里面的字段呢???//将来,我们的数据库的数据,可以转换为json数据,python,go,java都可以使用let user={"id":1,"name":"张三","age":22};//let user='{"id":1,"name":"张三","age":22}';//json字符串,字符串以""或'',包括起来;//console.log(user);//下面将这个json的数据拿到html元素里面;$(function(){//加载的时候,追加到span里面//访问json对象的时候,格式:对象名.key,对象是user$("#cont").append("编号:"+user.id+"<br/>"+"姓名:"+user.name+"<br/>"+"年龄:"+user.age+"<br/>");})</script></head><body><span id="cont" style="display:block;border: 1px solid #2A65BA;"></span></body>
</html>

json数组读取:

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>json数组的格式</title><script src="js/jquery-1.12.4.min.js"></script><script>//1.定义json数组格式;强调,不加''或""的都是对象格式;let users=[{"id":1,"name":"张三","age":22},{"id":2,"name":"李四","age":12},{"id":3,"name":"卢本伟","age":33}];console.log(users);//json对象数组;//目标:将name放到下拉框里面???$(function(){//针对users左一个遍历;for(let i=0;i<users.length;i++){//将name放到select元素里面;value的好处,可以将来给后台传递id,name做显示。$("#sel").append("<option value="+users[i].id+">"+users[i].name+"</option>");}})</script></head><body><!-- 下拉框;下拉框里面的元素对象是option列表对象; --><select id="sel"></select><!-- 如何扩充,将users的数据填充到table里面呢??? --></body>
</html>

第四章 Ajax和Json

案例 Ajax实现搜索框自动补全

因为Ajax技术异步请求和无刷新特性,使得在客户端用户体验越来越丰富。 最典型的一个案例是各大搜索引擎都应用的搜索关键字自动联想功能,当打开Google或者百度, 在搜索栏中输入关键字时, 会自动弹出很多和关键字相关的信息。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L3AKdB5Y-1595717644148)(E:\政通路\课堂笔记\S2\Ajax\assets\image-20200512094045330.png)]

思路

1.当用户松开键盘(输入内容)时向服务器发送请求,处理事件是onkeyup;

2.服务器得到客户端的请求数据之后,去数据库查询结果,返回查询结果到客户端;

3.客户端得到响应数据之后,自动填充到自动提示区域;

4.在选中内容上,光标悬停会有背景突出显示;

5.当我们单击某个内容的时候,内容显示到搜索框,整个提示区域关闭;

步骤

1.构建页面,onkeyup事件

搜索框的onkeyup事件;

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>ajax自动补全</title><style>@import url("css/news.css");</style><script src="js/jquery-1.12.4.min.js"></script><script>//1.2 搜索框onkeyup事件$(function () {$("#key").keyup(function () {//首选还是先判断文本框内容是否为空;let key=$(this).val();if(key==null||key==''){$("#tips").css("display","none");return;}else{//其他,就是搜索框有内容,ajax操作;}});});</script>
</head>
<body><!--1.1构建页面:页面元素(搜索框,按钮,提示区域)--><form action="" method="get"><input type="text" name="key" id="key" placeholder="请输入新闻标题"><button id="search" type="button">搜索</button><br/><div id="tips"></div></form>
</body>
</html>

2.客户端请求服务器的数据

$.ajax({})–>Servlet–>业务层对象–>dao层对象–sql数据;

NewsDaoImpl容易出错的代码,sql语句的模糊查询,再次强调!!!

可以先填坑!!!

//        String sql="select * from news where title like ?";
//        //预编译语句对象赋值,?% key %
//        Object[]params={"%"+key+"%"};String sql="select * from news where title like concat('%',?,'%')";Object[]params={key};return BaseDao.findList(sql,News.class,params);

补充:fastjons jar

Servlet代码

坑1:xml问题,需要设置编码;

坑2:json,修改text/json,务必有json

 //1.服务器端的Servlet,接受客户端的数据;String key=request.getParameter("key");//2.调用业务层的对象;业务层的对象,又需要去调用dao层对象;NewsService newsService=new NewsServiceImpl();//业务层对象,根据关键字来查找新闻;List<News> newsList = newsService.selNewsByKey(key);//System.out.println(newsList);response.setContentType("text/html;charset=utf-8");response.setCharacterEncoding("utf-8");//向客户端发送数据;PrintWriter writer = response.getWriter();//注意:此处有变化,使用到了新的jar:fastjson//之前输出的是List<News>对象;writer.print(JSON.toJSON(newsList)); //fastJson直接将我们的对象集合转换为json数据;writer.flush();writer.close();

3.填充数据到显示区域

这时候已经得到数据了:

[{}] 是json数组;

//测试json数组的长度//console.log(result.length);//如何显示2条json数组的数据;思路:循环;let content="";  //定义变量,接受title的内容;for(let i=0;i<result.length;i++){content+="<div>"+result[i].title+"</div>";}//填充到提示区域;$("#tips").html(content).show();

4.5 剩下功能

 //4.背景突出显示;利用hover(a,b):相当于mouseover,mouseout$(".list_link").hover(function(){$(this).addClass("hover");},function () {$(this).removeClass("hover");});//5.单击选中内容的时候,提示区域没有了,选中内容到了搜索框 ;$(".list_link").click(function () {$("#key").val($(this).html());$("#tips").html("").hide();//清空,并隐藏;});

作业:如何显示新闻标题 新闻作者,模仿天猫的自动补全;

  },function () {$(this).removeClass("hover");});//5.单击选中内容的时候,提示区域没有了,选中内容到了搜索框 ;$(".list_link").click(function () {$("#key").val($(this).html());$("#tips").html("").hide();//清空,并隐藏;});

作业:如何显示新闻标题    新闻作者,模仿天猫的自动补全;[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SlrYvPTS-1595717644153)(E:\政通路\课堂笔记\S2\Ajax\assets\image-20200519182905566.png)]

Ajax后端极简笔记相关推荐

  1. 小巧且功能齐全的linux,极简笔记PC版下载_极简笔记最新版下载v1.2.9_数码资源网...

    极简笔记是一款功能实用.轻量小巧且十分受欢迎的Markdown笔记软件,可以在不同的系统里同步数据.软件界面直观简洁.采用人性化的操作流程,功能齐全,支持在Windows.Linux.Mac系统.iP ...

  2. 【极简笔记】VPGNet: Vanishing Point Guided Network for Lane and Road Marking Detection and Recognition

    Abstract propose a unified end-to-end trainable multi-task network that jointly handles lane and roa ...

  3. Node.js 极简笔记

    Node.js 一.Node基础 概念:Javascript运行时平台,不是语言,也不是框架,是一个平台. 1.1 what is node ? Node.js 是一个基于Chrome V8 引擎的J ...

  4. 矩阵论极简笔记(2):列空间、正交补、零空间、行空间

    本篇讲解线性代数的4个基本空间 Vector space, subspace, linear space 是同一个东东 子空间(subspace)可以想象成一个超平面,根据线性空间的定义,0元素必须在 ...

  5. 《统计学习方法》极简笔记P2:感知机数学推导

    感知机模型 输入空间是$chisubseteqmathbb{R}^n$,输出空间是$y={+1,-1}$感知机定义为:$f(x)=sign(wx+b)$ 感知机学习策略 输入空间任一点$x_0$到超平 ...

  6. Nav2极简笔记01-安装与试用

    安装 功能包: ros-foxy-navigation2 ros-foxy-nav2-bringup ros-foxy-turtlebot3* 推荐使用新立得,例如nav2的地图服务器: 图形化安装适 ...

  7. 现代机械设计极简笔记(8):解析法

    韧性在国际单位制中是用焦耳每立方米(J/m3)来测量,塑性没有测量单位. 齿轮渐开线的极坐标方程 渐开线特性: 两个齿轮啮合,其中一个齿轮和机架的相对瞬心是轴,另一个齿轮和机架的相对瞬心也是轴,那么这 ...

  8. python海龟绘图常用指令【极简笔记】

    0.官方资料: https://docs.python.org/3/library/turtle.htmlhttps://docs.python.org/3/library/turtle.html   ...

  9. 2022-07-12 读书笔记:《写给所有人的极简统计学》

    2022-07-12 读书笔记:<写给所有人的极简统计学> 该系列文章系个人读书笔记及总结性内容,任何组织和个人不得转载进行商业活动! 本书作者:永野裕之 一直想学习一下数理统计的基础内容 ...

最新文章

  1. 据说--------100年前光绪帝在北大的讲话
  2. 今日头条 Go 建千亿级微服务的实践
  3. leetcode 781. 森林中的兔子(hashmap)
  4. 不就是要个30K的薪资,他还问我Nginx调优
  5. python3多线程编程_Python 3多线程编程学习笔记-基础篇
  6. 紫书 习题8-14 UVa 1616(二分+小数化分数+精度)
  7. elasticsearch中集群选举中的ping源码解析
  8. Go 触发 GC 的时机有哪些?能手动触发吗?
  9. 【报告分享】2020年中国智慧城市发展研究报告.pdf(附下载链接)
  10. C语言求圆的面积,周长
  11. 【渝粤教育】国家开放大学2018年春季 0266-21T设计构成 参考试题
  12. BT601、BT656和BT.709、BT1120
  13. 致远OA_0day批量植Cknife马一步到位
  14. 【WPF】命令 --《深入浅出WPF》
  15. python将两列内容合并_在pandas/python中,将两列合并为同一数据帧中的一列
  16. Django创建超级管理员用户步骤
  17. 2021-2027年全球与中国滴流咖啡壶行业市场前瞻与投资战略规划分析报告
  18. 2022焊工(初级)特种作业证考试题库及答案
  19. Vue使用Object标签对接IC读卡器硬件
  20. 几个PPT字体排版技巧,点进来就能学到新知识

热门文章

  1. C# foreach迭代器
  2. 理解分布式一致性:Raft协议
  3. Spring MVC中的拦截器/过滤器HandlerInterceptorAdapter的使用
  4. 深入分析 ThreadLocal 内存泄漏问题
  5. 【解决办法】你目前是以 ***的身份登录。请注销,然后使用你用于阅读组织电子邮件的帐户登录 Outlook
  6. 1054 The Dominant Color (20 分)_12行代码AC
  7. redis数据库价格_阿里云数据库Redis购买流程
  8. 项目在云服务器上的绝对路径,服务器上的绝对路径怎么写
  9. mysql mybatis配置_mybatis详解 与配置mybatis+spring+mysql.doc
  10. 高效多用的群集-Haproxy搭建Web集群