传统开发的缺点,是对于浏览器的页面,全部都是全局刷新的体验。如果我们只是想取得或是更新页面中的部分信息那么就必须要应用到局部刷新的技术。

局部刷新也是有效提升用户体验的一种非常重要的方式。

Ajax技术是基于js语言的扩展,能够通过将请求发送给后台,并从后台取得相关数据,然后将数据在页面做局部刷新的重要技术。

本教程会通过对ajax的传统使用方式,结合json操作的方式,结合跨域等高级技术的方式,对ajax做一个全面的讲解。

在线观看:https://www.bilibili.com/video/BV15k4y167XM

资料下载:http://www.bjpowernode.com/javavideo/118.html

什么是Ajax?

AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和XML)。

AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分页面内容的新方法

AJAX 不是新的编程语言,而是使用现有技术混合使用的一种新方法。ajax 中使用的技术有JavaScript, html , dom , xml ,css 等。主要是JavaScript , XML.

JavaScript: 使用脚本对象XMLHttpRequest 发送请求, 接收响应数据XML: 发送和接收的数据格式,现在使用json

AJAX 不单需要前端的技术,同时需要后端(服务器)的配合。服务器需要提供数据,数据是AJAX 请求的响应结果。

_ueditor_page_break_tag_

全局刷新和局部刷新

B/S 结构项目中, 浏览器(Browse)负责把用户的请求和参数通过网络发送给服务器(Server),服务端使用 Servlet(多种服务端技术的一种)接收请求,并将处理结果返回给浏览器。

浏览器在html,jsp 上呈现数据,混合使用css, js 帮助美化页面,或响应事件。

全局刷新

登录请求处理:

index.jsp 发起登录请求--------LoginServlet result.jsp

发起请求request 阶段:

浏览器现在内存中是index 页面的内容和数据 :

服务器端应答结果阶段:

sevlet 返回后把数据全部覆盖掉原来index 页面内容, result.jsp 覆盖了全部的浏览器内存数据。 整个浏览器数据全部被刷新。重新在浏览器窗口显示数据,样式,标签等

全局刷新原理:

1) 必须由浏览器亲自向服务端发送请求协议包。

2) 这个行为导致服务端直接将【响应包】发送到浏览器内存中

3) 这个行为导致浏览器内存中原有内容被覆盖掉

4) 这个行为导致浏览器在展示数据时候,只有响应数据可以展示

局部刷新

浏览器在展示数据时,此时在窗口既可以看到本次的响应数据, 同时又可以看到浏览器内存中原有数据

局部刷新原理:

1) 不能由浏览器发送请求给服务端

2) 浏览器委托浏览器内存中一个脚本对象代替浏览器发送请求.

3) 这个行为导致导致服务端直接将【响应包】发送脚本对象内存中

4) 这个行为导致脚本对象内容被覆盖掉,但是此时浏览器内存中绝大部分内容没有收到任何影响

5) 这个行为导致浏览器在展示数据时候,同时展示原有数据和响应数据

AJAX 实现局部刷新的一种技术。

异步请求对象:

在局部刷新,需要创建一个对象,代替浏览器发起请求的行为,这个对象存在内存中。

代替浏览器发起请求并接收响应数据。这个对象叫做异步请求对象。

全局刷新是同步行为, 局部刷新是异步行为[浏览器数据没有全部更新] 这个异步对象用于在后台与服务器交换数据。XMLHttpRequest 就是我们说的异步对象。

XMLHttpRequest 对象能够:

  • 在不重新加载页面的情况下更新网页

  • 在页面已加载后向服务器请求数据

  • 在页面已加载后从服务器接收数据

所有现代浏览器 (IE7+、Firefox、Chrome、Safari 以及 Opera) 都内建了 XMLHttpRequest 对象。通过一行简单的 JavaScript 代码,我们就可以创建 XMLHttpRequest 对象

创建 XMLHttpRequest 对象的语法(xhr): var xmlhttp=new XMLHttpRequest();

AJAX 中的核心对象就是XMLHttpRequest

_ueditor_page_break_tag_

AJAX 异步实现步骤

XMLHttpRequest 对象介绍

(1) 创建对象方式

var xmlHttp = new XMLHttpRequest();

(2) onreadstatechange 事件

当请求被发送到服务器时,我们需要执行一些基于响应的任务。每当readyState 改变时,就会触发 onreadystatechange 事件。此事件可以指定一个处理函数function。

通过判断XMLHttpReqeust 对象的状态,获取服务端返回的数据。

语法:

xmlHttp.onreadystatechange= function() {

if( xmlHttp.readyState == 4 && xmlHttp.status == 200){

处理服务器返回数据

}

}

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

属性说明:

onreadystatechange 属性:一个 js 函数名 或 直接定义函数,每当readyState 属性改变时,就会调用该函数

readyState 属性:

存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。

• 0: 请求未初始化,创建异步请求对象 var xmlHttp = new XMLHttpRequest()

• 1: 初始化异步请求对象, xmlHttp.open(请求方式,请求地址,true)

• 2: 异步对象发送请求, xmlHttp.send()

• 3: 异步对象接收应答数据 从服务端返回数据。XMLHttpRequest 内部处理。

• 4: 异步请求对象已经将数据解析完毕。 此时才可以读取数据。

status 属性:

200: "OK"

404: 未找到页面

(1) 初始化请求参数:

方法:

open(method,url,async) : 初始化异步请求对象

参数说明:

method:请求的类型;GET 或 POST

url:服务器的servlet 地址

async:true(异步)或 false(同步)

例如 :

xmlHttp.open(“get”,”http:192.168.1.20:8080/myweb/query”,true)

(2) 发送请求

xmlHttp.send()

(3) 接收服务器响应的数据

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

responseText:获得字符串形式的响应数据responseXML:获得 XML 形式的响应数据

_ueditor_page_break_tag_

AJAX 实例

全局刷新计算 bmi

需求:计算某个用户的BMI。 用户在jsp 输入自己的身高,体重;servlet 中计算BMI,并显示 BMI 的计算结果和建议。

BMI 指数(即身体质量指数,英文为BodyMassIndex,简称 BMI),是用体重公斤数除以身高米数平方得出的数字,是目前国际上常用的衡量人体胖瘦程度以及是否健康的一个标准

成人的 BMI 数值:

1)过轻:低于 18.5

2)正常:18.5-23.9

3)过重:24-27

4)肥胖:28-32

5)非常肥胖,高于 32

_ueditor_page_break_tag_

开发步骤:

1. 在idea 中创建新的工程,名称:ch01-bmi-ajax

2. 配置tomcat 服务器,如果已经配置,省略此步骤。

选择Local

配置tomcat 服务器的位置

Module 添加tomcat 支持

出现窗口

选择 2 Library

确定使用tomcat

3. 创建 jsp,定义form,有参数name, weight, height

4. 创建 Servlet, 名称 BMIServlet

5. 注册 servlet

6. 创建 result.jsp

web 目录下创建 result.jsp 文件

7.配置运行程序,输入参数。显示bmi

_ueditor_page_break_tag_

使用HttpServletResponse 响应输出

1. 新建jsp: indexPrint.jsp

2. 新建Servlet, 名称 BMIServeltPrint

使用 ajax 请求,计算 bmi

1. 新建ajax.jsp

2. 在ajax.jsp 的head 部分指定 doAjax()函数

3. 复制BMIServletPrint,重新命名 BMIServletAjax 代码不需要改动

4. 注册 Servlet

5. 在浏览器访问ajax.jsp

在BMIServltAjax 的第一行设置断点,然后在 jsp 中点击按钮,发起请求,观察浏览器中的弹出的内容变化

6. 修改ajax.jsp 中的doAjax()函数

7.访问ajax.jsp 请求

在jsp 中点击按钮,发起请求,观察浏览器中的弹出的内容变化

8.获取dom 对象 value 值

9. 在浏览器测试发送ajax 请求

10.修改 doAjax 函数

Ajax|看这一篇就够了!详解Ajax工作原理及开发步骤的更多相关文章

  1. 关于 Docker 镜像的操作,看完这篇就够啦 !(下)

    紧接着上篇<关于 Docker 镜像的操作,看完这篇就够啦 !(上)>,奉上下篇 !!! 镜像作为 Docker 三大核心概念中最重要的一个关键词,它有很多操作,是您想学习容器技术不得不掌 ...

  2. JVM内存模型你只要看这一篇就够了

    JVM内存模型你只要看这一篇就够了 我是一只孤傲的鱼鹰 让我们不厌其烦的从内存模型开始说起:作为一般人需要了解到的,JVM的内存区域可以被分为:线程栈,堆,静态方法区(实际上还有更多功能的区域,并且这 ...

  3. 【java编程】ServiceLoader使用看这一篇就够了

    转载:https://www.jianshu.com/p/7601ba434ff4 想必大家多多少少听过spi,具体的解释我就不多说了.但是它具体是怎么实现的呢?它的原理是什么呢?下面我就围绕这两个问 ...

  4. Java中的多线程=你只要看这一篇就够了

    如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现.说这个话其 ...

  5. [转帖]nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件

    nginx学习,看这一篇就够了:下载.安装.使用:正向代理.反向代理.负载均衡.常用命令和配置文件 2019-10-09 15:53:47 冯insist 阅读数 7285 文章标签: nginx学习 ...

  6. 2019-5-25-win10-uwp-win2d-入门-看这一篇就够了

    title author date CreateTime categories win10 uwp win2d 入门 看这一篇就够了 lindexi 2019-5-25 20:0:52 +0800 2 ...

  7. 鸿蒙应用程序Ability(能力)看这一篇就够

    本节概述 什么是Ability Ability分类 Ability生命周期 Ability之间跳转 什么是Ability Ability意为能力,是HarmonyOS应用程序提供的抽象功能.在Andr ...

  8. windows server 2019 域控批量新增不用,只看这一篇就够了,别的不用看

    windows server 2019 域控批量新增不用,只看这一篇就够了,别的不用看 1. 新建excel表格 A B C D E 姓 名 全名 登录名 密码 李 四 李四 李四 test123!@ ...

  9. 什么是 DevOps?看这一篇就够了!

    本文作者:Daniel Hu 个人主页:https://www.danielhu.cn/ 目录 一.前因 二.记忆 三.他们说-- 3.1.Atlassian 回答"什么是 DevOps?& ...

随机推荐

  1. 不推荐别的了,IDEA 自带的数据库工具就很牛逼!

    MySQL 等数据库客户端软件市面上非常多了,别的栈长就不介绍了, 其实 IntelliJ IDEA 自带的数据库工具就很牛逼,不信你继续往下看. 本文以 IntelliJ IDEA/ Mac 版本作 ...

  2. 仅用一句SQL更新整张表的涨跌幅、涨跌率

    问题场景 各大平台店铺的三项评分(物流.服务.商品)变化情况: 商品每日价格的变化记录: 股票的实时涨跌浮: 复现场景 表:主键ID,商品编号,记录时的时间,记录时的价格,创建时间. 问题:获取每个商 ...

  3. 1.8.5- input按钮组

  4. 软件篇-05-融合ORB_SLAM2和IMU闭环控制SLAM底盘运动轨迹

      前面我们已经得到了当前底盘在世界坐标系中的位姿,这个位姿是通过融合ORB_SLAM2位姿和IMU积分得到的,在当前位姿已知的case下,给SLAM小车设置一个goal,我这里是通过上位机设置,然后 ...

  5. php实现redis消息发布订阅

    基础介绍 Pub/Sub功能(means Publish, Subscribe)即发布及订阅功能 基于事件的系统中,Pub/Sub是目前广泛使用的通信模型,它采用事件作为基本的通信机制,提供大规模系统 ...

  6. Python2中的urllib、urllib2和 Python3中的urllib、requests

    目录 Python2.x中 urllib和urllib2 常用方法和类 Python3.x中 urllib requests Python2.x中 urllib和urllib2 urllib 和 ur ...

  7. 通过例子分析MVVM

    通过一个简单的计数器例子分析MVVM. 代码 demo2.html <!DOCTYPE html> <html lang="en"> <head> ...

  8. android之Frame Animation

    一.在xml文件中设置帧动画 1.首先得在drawable资源文件夹下创建一个animation_list文件 <?xml version="1.0" encoding=&q ...

  9. Mac SSH工具-Termius

    全平台,功能强大 SSH连接.SFTP连接.端口转发.多设备同步 官方网站

  10. layui中的多图上传

    效果展示: 1.html部分: 注:<input> 作为隐藏域,用于保存多图上传的资源数组,方便后期进行 form 表单的提交 <input type="hidden&qu ...