学习之前举一个简单的小栗子,让我们简单了解一下Ajax的应用与好处。一般网站都会有自己的数据库,用来单独存储用户的个人信息,平时我们在注册账号的时候会遇到信息输入的页面,假设第一个输入信息是用户名的填写,一般当你填写这第一个的时候旁边就会有提醒,提醒你的用户名是否合法,是否被占用等等。

这里就用到了Ajax,而不是像老版的Web设计,需要把所有的注册信息填写完毕,再提交到数据库去验证,再返回给客户提示。Ajax提高了效率,减少了运行成本,提升了用户体验。

一、Ajax 简介

== 传统的Web应用模式和 ajax 方式的比较 //上面

== AJAX应用的特点

1. 不刷新整个页面,在页面内与服务器通信。

2. 使用异步方式与服务器通信,不需要打断用户的操作,具有更加迅速的响应能力。

3. 应用仅由少量页面组成。大部分交互在页面之内完成,不需要切换整个页面。

==AJAX的好处

--减轻服务器的负担。AJAX的原则是“按需取数据”,可以最大程度的减少冗余请求,和响应对服务器造成的负担。

--无刷新更新页面,减少用户心理和实际的等待时间。

--可以把以前一些服务器负担的工作转嫁到客户端,利用客户端闲置的能力来处理,减轻服务器和带宽的负担,节约空间和宽带租用成本。

--可以调用外部数据。

--基于标准化的并被广泛支持的技术,不需要下载插件或者小程序。

--进一步促进页面呈现和数据的分离

==AJAX基础—概念

Asynchronous JavaScript and XML(异步JavaScript和XML)是一种创建交互网页应用的网页开发技术。所谓同步,即客户端脚本在请求服务器后,客户端脚本等待服务器返回响应之后再继续执行。而异步则是,客户端脚本在请求服务器之后,服务器还没有返回相应,客户端就可以执行下面的脚本.这就是异步。异步也表现就是在不打扰用户正常浏览的情况下,在后台与服务器交互。

==AJAX技术组成

XMLHttpRequest:进行异步数据读取;

Javascript:Javascript一直被定位为客户端的脚本语言,应用最多的地方是表单数据的校验。

现在,可以通过Javascript操作XMLHttpRequest,来跟数据库打交道。

DOM: DOM(Document Object Model)是提供给HTML和XML使用的一组API,提供了文件的表述结构,并可以利用它改变其中的内容和可见物。脚本语言通过DOM才可以跟页面进行交互。

XML:通过XML(Extensible Markup Language),可以规范的定义结构化数据,是网上传输的数据和文档符合统一的标准。

DHTML 或 Dynamic HTML:用于动态更新表单。我们将使用 div、span 和其他动态 HTML 元素来标记 HTML。

二、XMLHttpRequest

XMLHttpRequest 对象用于在后台与服务器交换数据。

XMLHttpRequest 对象是开发者的梦想,因为您能够:

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

2.在页面已加载后从服务器请求数据

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

4.在后台向服务器发送数据

5.所有现代的浏览器都支持 XMLHttpRequest 对象 (IE6 除外)

三、创建 XMLHttpRequest 对象

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

var xmlhttp=new XMLHttpRequest();

老版本的 Internet Explorer (IE5 和 IE6)使用 ActiveX 对象:

var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

四、通过 XMLHttpRequest 对象实现 ajax 效果

var xmlhttp;
$(function(){
$("button").click(function(){
if(window.XMLHttpRequest){ //如果浏览器支持这个对象
xmlhttp=new XMLHttpRequest();
}else if(window.ActiveXObject){ //如果是ie6
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
} if(xmlhttp){ //成功
xmlhttp.onreadystateChange =myReadyStateChange; //它指向一个回调函数
xmlhttp.open("get","UserServlet",true); //true表示使用异步方式
/*
//如果要改用post方式,要改用下面的方式
//xmlHttp.open("post", "UserServlet", true);
//xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); //这句不加,后台取不到 userName
//xmlHttp.send("userName=zhangsan&password=aaa"); //如果有多个参数,可以用&号分开
*/
xmlhttp.send(null);
}else{
alert("XMLHttpRequest对象创建失败");
} });
});
//回调函数 在什么时候被调用 在 xmlhttp 的 readyState 发生变化的时候被调用
function myReadyStateChange(){
//alert(xmlhttp.readyState);
if(xmlhttp.readyState==4) //等于四,表示服务端返回了
{
if(xmlhttp.status ==200 ) //xmlhttp.status 代表服务端返回的状态码
{
$("#A1").html(xmlhttp.status); //状态码
$("#A2").html( xmlhttp.statusText); //状态信息
$("#A3").html(xmlhttp.responseText); //响应的消息
}
}
}
<button>ajax方式得到数据</button><br />
Status(状态码): <span id="A1"></span> <br />
Status text(状态说明): <span id="A2"></span> <br />
Response(响应的数据): <span id="A3"></span>

服务端 UserServlet

response.getWriter().print("this is server data");  //尽量别加ln

备注:(前面我在学习网络上韩顺平的视频中,有记过这里的笔记,这里重温一下)

响应状态码: 表示服务器对请求的各种不同处理结果,是一个三位的10制数。

可归为 5 类

100段的 :成功接收请求,要求客户端继续提交下一次请求才能完成整个处理

200段的 :成功接收请求,并处理完成

300段的 :为完成请求,客户端需进一步细化请求,例如请求的资源已经移动到一个新地址

400段的 :客户端请求有错误

--400 Bad Request  //客户端请求有语法错误,不能被服务器所理解

--401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用

--403 Forbidden  //服务器收到请求,但是拒绝提供服务

--404 找不到

500段的 :服务器端出现错误

--500 Internal Server Error //内部服务器错误,服务端的CGI,ASP,JSP等程序发生错误

--503 Server Unavailable  //服务不可用,服务器由于当前负载过大,一段时间后可能恢复正常

注释:onreadystatechange 是一个事件句柄。它的值 (state_Change) 是一个函数的名称,当 XMLHttpRequest 对象的状态发生改变时,会触发此函数。状态从 0 (uninitialized) 到 4 (complete) 进行变化。

仅在状态为 4 时,我们才执行代码。

5 个状态中每一个都有一个相关联的非正式的名称,下表列出了状态、名称和含义:

状态 名称 描述
0 Uninitialized 初始化状态。XMLHttpRequest 对象已创建或已被 abort() 方法重置
1 Open open() 方法已调用,但是 send() 方法未调用。请求还没有被发送
2 Sent Send() 方法已调用,HTTP 请求已发送到 Web 服务器。未接收到响应
3 Receiving 所有响应头部都已经接收到。响应体开始接收但未完成
4 Loaded HTTP 响应已经完全接收

readyState 的值不会递减,除非当一个请求在处理过程中的时候调用了 abort() 或 open() 方法。每次这个属性的值增加的时候,都会触发 onreadystatechange 事件句柄。

responseText

--目前为止为服务器接收到的响应体(不包括头部),或者如果还没有接收到数据的话,就是空字符串。

--如果响应包含了为响应体指定字符编码的头部,就使用该编码。否则,假定使用 Unicode UTF-8。

status

--由服务器返回的 HTTP 状态代码,如 200 表示成功,而 404 表示 "Not Found" 错误。当 readyState 小于 3 的时候读取这一属性会导致一个异常。

statusText (Not Found、OK)

--这个属性用名称而不是数字指定了请求的 HTTP 的状态代码。也就是说,当状态为 200 的时候它是 "OK",

--当状态为 404 的时候它是 "Not Found"。和 status 属性一样,当 readyState 小于 3 的时候读取这一属性会导致一个异常。

之前我在网上看到一些特别有趣的解释相应状态码的图片,分享给大家:

Java基础——Ajax(一)的更多相关文章

  1. Java基础——Ajax(三)

    Ajax 中文乱码问题(分两种情况) 1.对于Ajax  发的 post请求,服务端只需要 : request.setCharacterEncoding("utf-8"); 2.对 ...

  2. Java基础——Ajax(二)

    一.jQuery 实现 ajax $(function(){ $("#userName").blur(function(){ // 发ajax请求 用的函数原型: $.get(ur ...

  3. Java基础96 ajax技术的使用

    本文知识点(目录): 1.ajax的概念   2.使用ajax技术获取服务端的数据_实例   3.使用ajax技术检查用户名是否已存在_实例   4.使用ajax技术验证登录页面的用户名和密码_实例 ...

  4. [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)

    如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html   谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...

  5. 剑指Offer——知识点储备-Java基础

    剑指Offer--知识点储备-Java基础 网址来源: http://www.nowcoder.com/discuss/5949?type=0&order=0&pos=4&pa ...

  6. 转载:[Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)

    原文:http://www.cnblogs.com/wang-meng/p/5898837.html 一:继承.抽象类与接口区别.访问控制(private, public, protected,默认) ...

  7. java学习路线之必会的java基础教程

    大数据产业已进入发展的“快车道”,急需大量优秀的大数据人才作为后盾.如果你是Java编程出身,那学习大数据自然是锦上添花:但如果你是刚刚接触大数据技术,还在Java编程基础阶段,这篇文章非常值得你看! ...

  8. JAVA基础学习-集合三-Map、HashMap,TreeMap与常用API

    森林森 一份耕耘,一份收获 博客园 首页 新随笔 联系 管理 订阅 随笔- 397  文章- 0  评论- 78  JAVA基础学习day16--集合三-Map.HashMap,TreeMap与常用A ...

  9. 一份最贴近真实面试的Java基础面试题

    这是一份Java基础知识的面试题.在网上的关于Java的面试题数不胜数,但认真看过感觉大多数都没有实用性,有很多是面试官根本就不会问到的,那些已经脱离了实际开发的技术问题.而这份资料来源自一份个人觉得 ...

随机推荐

  1. 几种String对象方法的区别

    1.在String对象方法中,发现.slice()方法和.substring()方法的作用几乎相同,都是根据起始索引返回截取得到的字符串.经过查阅资料和实测得到区别: 正常情况下索引都为正值,返回值为 ...

  2. 使用Docker搭建CentOS 7 + Apache 2.4+ PHP7

    从Docker Hub上Pull最新的CentOS 7镜像并新建容器 # sudo docker pull centos docker run -p 8082:80 --name centos_c - ...

  3. 背水一战 Windows 10 (70) - 控件(控件基类): UIElement - Transform3D(3D变换), Projection(3D投影)

    [源码下载] 背水一战 Windows 10 (70) - 控件(控件基类): UIElement - Transform3D(3D变换), Projection(3D投影) 作者:webabcd 介 ...

  4. 使用 PLSQL 连接 Oracle9i 数据库

    昨天用了Navicate连接Oracle数据库,不停的掉线,然后死机,只能重启Navicate,没办法,还是用回plsql吧,重装了一遍(之前重装系统后,电脑自带的公司原有的软件没啦) 先安装了Ora ...

  5. 微信小程序 web-view 的 url 带参问题

    在微信小程序开发过程中,会需要跳转到外部链接,微信提供了 <web-view>组件供我们使用. 为减少重复代码,一般会将这个功能单独抽取为一个页面供大家使用: <template&g ...

  6. Swift5 语言指南(十九) 错误处理

    错误处理是响应程序中的错误条件并从中恢复的过程.Swift为在运行时抛出,捕获,传播和操纵可恢复的错误提供了一流的支持. 某些操作无法保证始终完成执行或生成有用的输出.Optionals用于表示缺少值 ...

  7. ubuntu 16.04 搭建git小型服务器

    最近搭建了一个小型git服务器,由于网上资料鱼龙混杂,让我着实踩了不少地雷.做一个记录,以备不时之需. 一 搞清楚你的需求? 假如你要搭建的服务器只供几十个人使用,并且没有专门的网管服务的话,切记,一 ...

  8. Spring Boot读取配置的 5 种方式

    读取application文件 在application.yml或者properties文件中添加: info.address=USA info.company=Spring info.degree= ...

  9. Devops流程规范

    芯盾时代_Devops_Docker操作说明及使用规范 北京芯盾时代科技有限公司 2019年1月 修订记录 版本号 修订人 修订日期 修订描述 v0.1 芯盾 2019/1/15 初次创建 v0.2 ...

  10. AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

    AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署 Amazon ElastiCache 连接至 Redis 节点 通过 AWS Command Line Inter ...