Ajax

Ajax: Asynchronous javaScript and xml (异步的JavaScript和xml技术)。当我们向服务器发起请求的时候,服务器不会像浏览器响应整个页面,而是只有局部刷新。它是一个异步请求。

请求:

同步请求:只有当一次请求完全结束以后才能够发起另一次请求。

异步请求:不需要其他请求结束就可以向服务器发起请求。

Ajax的优点:

1、ajax是异步请求,浏览器页面只需要进行局部刷新,效率非常的高。

不足的地方:

1、因为ajax是异步请求,所以会导致请求服务器的次数大大增加,增加服务器的负担。

2、因为ajax使用的是JavaScript来接收服务器响应的数据。而JavaScript对浏览器的兼容性不太好。所以有时候对不同的浏览器进行区别对待。但是该问题可以通过jquery来解决。

ajax的入门程序

1. 编写服务端代码:

image.png

Servlet中的内容:

@WebServlet(name = "AjaxDemo1", value = "/AjaxDemo1")

public class AjaxDemo1 extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

// 编码问题

response.setContentType("text/html;charset=utf-8");

request.setCharacterEncoding("utf-8");

// 获取请求参数

String username = request.getParameter("name");

// 输出请求参数

System.out.println(username);

// 响应内容

response.getWriter().print("ajax入门小程序");

}

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

/*

* 服务器向客户端响应ajax请求的时候, 可以响应text,html,xml,json数据格式

*/

doPost(request, response);

}

}

2. 编写客户端代码

Ajax请求服务器需要依赖一个非常核心的类XMLHttpRequest, 通过该对象向服务端发送异步请求,并且还可以接收服务端相应的数据。

如何创建该对象:

new XMLHttpRequest()针对现在的主流浏览器 和IE7 以上版本的浏览器

new ActiveXObject(Msxml2.XMLHTTP); 针对IE6浏览器。

new ActiveXobject(Microsoft.XMLHTTP); 针对IE5.5之前的版本

如果上面三种方式都无法创建 ajax对象 ,那么你当前浏览器无法使用ajax技术。

创建ajax对象的JS工具函数:

createXMLHttp.js

// ajax的四个步骤

// 创建XMLHttpRequest对象

function createXmlHttp() {

var xmlHttp;

try {

xmlHttp = new XMLHttpRequest();

} catch (e) {

try {

xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");

} catch (e) {

try {

xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

} catch (e) {

alert("浏览器太老,不能使用ajax");

}

}

}

return xmlHttp;

}

具体代码:

User: menglanyingfei

Date: 2018/1/28

Time: 15:22

--%>

ajax01

异步请求

$("button").click(function () {

// 1. 创建XMLHttpRequest对象

var xmlHttp = createXmlHttp();

// 2. 调用open方法获取跟服务器的连接

/*

method: 请求方式 get post

url:请求路径

async:表示同步请求还是异步请求 true:异步

*/

xmlHttp.open("GET",

"${pageContext.request.contextPath}/AjaxDemo1?name=中文", true);

// 3. 调用send方法, 向服务器发起请求

// 如果是post请求, 那么需要在send方法中带请求参数

// 如果是get请求, 那么参数为null

xmlHttp.send(null);

// 4. 注册一个监听器

/*

不断地去监听请求的过程返回的一个状态码

在这个时候我们只需要关注readyState == 4的情况,这个时候说明服务器完成了响应

我们还需要关注另外一个状态码 status是服务器响应过来的, 需要status == 200

*/

xmlHttp.onreadystatechange = function () {

// alert(xmlHttp.readyState);

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

//此时说明响应完毕 我们可以通过xml.responseText 来获取服务器的响应内容(文本内容)

$("div").html(xmlHttp.responseText);

}

};

});

校验用户名是否已经存在,采用post提交

以前的做法: 需要提交一个表单。同步请求

现在的做法: ajax请求 异步请求

服务端代码:

image.png

用户名:

$("input").focus(function(){

$("span").text("");

$(this).val("");

});

$("input").blur(function(){

//获取文本框中值

var username = $(this).val();

//创建ajax对象

var xmlHttp = createXmlHttp();

//调用open

xmlHttp.open("POST", "${pageContext.request.contextPath}/AjaxDemo", true);

//如果是post那么需要设置请求头

xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

//调用send方法 将请求参数作为send方法的参数值传递过去,参数格式字符串

xmlHttp.send("username="+username);

//注册一个监听器

xmlHttp.onreadystatechange = function(){

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

var text = xmlHttp.responseText;

$("span").text(text).css("color","red");

}

}

});

使用post提交的时候需要注意的问题:

1.在send方法中一定要传入请求参数

2.使用post提交要设置请求头 ("context-type", "application/w-xxx-form-urlencoded");

ajax接收服务端相应的xml片段(了解)

编写服务端的代码:

image.png

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

// 编码问题, 由于向客户端响应的xml, 所有下面的代码改成text/xml

response.setContentType("text/xml;charset=utf-8");

// 向客户端响应xml片段, 细心, 这里是id='001'

String xmlStr = "" +

"" +

"小李" +

"男" +

"" +

"";

response.getWriter().print(xmlStr);

}

客户端代码:

User: menglanyingfei

Date: 2018/1/28

Time: 15:22

--%>

ajax01

获取学生信息

$("button").click(function () {

var xmlHttp = new XMLHttpRequest();

//alert(xmlHttp);

xmlHttp.open("get",

"${pageContext.request.contextPath}/AjaxDemo2", true);

xmlHttp.send(null);

xmlHttp.onreadystatechange = function () {

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

// 通过responseXML属性获取服务端响应过来的xml片段

var xmlDoc = xmlHttp.responseXML;

//alert(xmlDoc);

// xmlDoc就是服务端响应的document对象

var stuEle = xmlDoc.getElementsByTagName("student")[0];

// 获取该元素的id属性值

var id = stuEle.getAttribute("id");

// 获取和中的文本内容

var nameEle = stuEle.getElementsByTagName("name")[0];

// 获取文本内容

var name = nameEle.innerHTML;

//alert(name);

var sexEle = stuEle.getElementsByTagName("sex")[0];

var sex = sexEle.innerHTML;

$("div").html(id + ":" + name + ":" + sex);

}

}

})

注意的问题: 服务器相应xml是 要设置响应头: text/xml

补充的问题:

ajax可以直接向xml文件发送请求。xml文件会整个响应给客户端,通过XMLHttpRequest的responseXML属性接收服务端相应的xml数据。直接将该xml文件转换成dom对象,然后可以通过dom对象的方法来解析该xml文件

image.png

student.xml:

Java

客户端代码:

User: menglanyingfei

Date: 2018/1/28

Time: 15:22

--%>

ajax01

获取学生信息

$("button").click(function () {

var xmlHttp = new XMLHttpRequest();

xmlHttp.open("get", "${pageContext.request.contextPath}/student.xml", true);

xmlHttp.send(null);

xmlHttp.onreadystatechange = function () {

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

// 通过responseXML属性获取服务端响应过来的xml片段

var xmlDoc = xmlHttp.responseXML;

// xmlDoc就是服务端响应的document对象

var stuEle = xmlDoc.getElementsByTagName("student")[0];

// 获取该元素的id属性值

var id = stuEle.getAttribute("id");

// 获取和中的文本内容

var nameEle = stuEle.getElementsByTagName("name")[0];

// 获取文本内容

var name = nameEle.innerHTML;

var sexEle = stuEle.getElementsByTagName("sex")[0];

var sex = sexEle.innerHTML;

$("div").html(id + ":" + name + ":" + sex);

}

}

})

完整代码地址

image.png

https://github.com/menglanyingfei/front-end-Learning/tree/master/ajax%26json/ajax-day01

HTML发送异步请求,使用原生JS发送ajax异步请求相关推荐

  1. 原生JS写Ajax的请求函数

    本文主要介绍了如何通过原生JavaScript封装ajax请求,文中给出了具体的实现代码和详细的解释,希望对你有所帮助. 一.JS原生Ajax ajax:一种请求数据的方式,不需要刷新整个页面: aj ...

  2. 原生js ajax请求 post,原生js实现ajax 发送post请求

    2019独角兽企业重金招聘Python工程师标准>>> var postData = { "name1": "value1", "n ...

  3. js异步请求php数据,原生JS发送异步数据请求实例详解

    这篇文章主要为大家详细介绍了原生JS发送异步数据请求的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 在做项目的时候,有时候需要用到异步数据请求,但是如果这个时候没有框架的依赖,就需要用到 ...

  4. 原声ajax发送post请求,原生JS实现ajax 发送post请求

    1. [代码]原生JS实现ajax 发送post请求 var oStr = ''; var postData = {}; var oAjax = null; //post提交的数据 postData ...

  5. js原生ajax跨域请求,封装一个原生js的ajax请求,支持IE9CORS跨域请求

    前言 关于纯js的ajax请求,我之前有文章写过, https://www.haorooms.com/post/js_ajax_chun , 关于CORS跨域资源共享,我也有文章写过, https:/ ...

  6. 原生ajax如何跨域,封装一个原生js的ajax请求,支持IE9CORS跨域请求

    前言 关于纯js的ajax请求,我之前有文章写过,https://www.haorooms.com/post/js_ajax_chun, 关于CORS跨域资源共享,我也有文章写过,https://ww ...

  7. 原生js实现ajax的文件异步提交功能、图片预览功能.实例

    采用html5使得选择图片改变时,预览框中图片随之改变.input文件选择框美化.原生js完成文件异步提交 效果图: 代码如下,可直接复制并保存为html文件打开查看效果 <html> & ...

  8. 使用原生js写ajax

    // 使用原生js 封装ajax // 兼容xhr对象 function createXHR(){if(typeof XMLHttpRequest != "undefined"){ ...

  9. Ajax工作原理和原生JS的ajax封装

    前言: 之所以用ajax作为博客的开篇,是因为无论从ajax的出现还是从它的作用上来说,ajax对于前端无疑是意义重大的.甚至可以说,是ajax带来了前端这个行业.当然,历史并不能说明当下,曾经的辉煌 ...

最新文章

  1. csdn自带的在线编辑器如何让图片并排显示
  2. 一本跳进挨踢生活圈的日记(南京站)
  3. Python 的 heapq 模块源码分析
  4. 进程分析命令(持续更新中)
  5. UPX 加壳工具:The Ultimate Packer for eXecutables
  6. manchi翻译中文 mi_求这一段意大利文歌词中文翻译(Mi Manchi)
  7. 什么是YARN?跟HBase和Spark比优势在哪?终于有人讲明白了
  8. C#设计学生成绩排序
  9. 转:Session,有没有必要使用它?
  10. 超过 C++、压制 Java 与 C,Python 拔得 TIOBE 年度编程语言!
  11. 歌华链刷 openwrt 记录
  12. 计算机分析桁架受力,结构力学教学中桁架的概念分析与实践
  13. 关于SETUP FACTORY %AppFolder%写入注册表问题
  14. 局域网聊天程序 java MySQL_局域网聊天软件设计与实现(Linux,C++,MySQL)
  15. echarts柱状图实现重叠
  16. unity 接 steam,获取steamID ,username
  17. OKR教练:为何落地OKR需要复盘?
  18. 中国黑客传说:游走在黑暗中的精灵
  19. 使用 AndroidSocketClient 库建立 SSL 安全链接
  20. python pip安装numpy_【风马一族_Python】 安装pip与Numpy

热门文章

  1. 华为任正非强烈推荐的一篇爆文:以色列崛起之谜!
  2. 语法练习:missing_char
  3. 语音问答机器人小程序
  4. 基于MATLAB的LDL分解法
  5. linux 中-ldl和-lpthread 是什么意思?
  6. (已解决)bootstrap录播图切换按钮出不来(变成矩形)解决方案 ...还有彩蛋哦
  7. 什么是 Word2Vec
  8. angularJS中service、provice、factor区别
  9. 全球与中国椰子提取物市场深度研究分析报告
  10. Excel日历控件实现下拉选取日期含VB代码实现