一、概念

全称:Asynchronors Javascript XML  异步JS数据交换格式。

【Asynchronous】:异步的,即在执⾏ AJAX 请求时不会阻塞后⾯代码的运⾏。
【JavaScript】:使⽤ JavaScript 实现浏览器与服务器之间的数据交互。
【XML】:⼀种数据结构,AJAX 创建之初在与服务器进⾏数据交换时,使⽤的数据结构就是 XML。但是现在已经慢慢被 JSON 数据结构所取代。

二、步骤

1. 创建 XMLHttpRequest 对象。

  1. //1、:创建 XMLHttpRequest 对象。
  2. let xhr = new XMLHttpRequest();

考虑到浏览器版本的不同,做出简单的判断

  1. let xhr;
  2. if(window.XMLHttpRequest){
  3. // IE7+, Firefox, Chrome, Opera, Safari 浏览器执⾏代码
  4. xhr = new XMLHttpRequest();
  5. } else {
  6. // IE6, IE5 浏览器执⾏代码
  7. xhr = new ActiveXObject( 'Microsoft.XMLHTTP' );
  8. }

2. 打开连接。

格式:

  1. xhr.open(method, url, async);
  2. /**
  3. *method:数据接收方式,GET/POST
  4. *url:数据链接,JSON格式
  5. *async:是否异步,JS的特性本身为异步,所以通常设为默认值“true”
  6. */

例子:

  1. xhr.open("get", "https://getman.cn/mock/getStudents/data.json", true);

3. 发送 HTTP 请求。

  1. xhr.send();

若为GET方式传输,则不用填参数,若为POST请求,传递的数据是放在 send ⽅法的参数中。

  1. xhr.send("username=zhangsan&pwd=123");

4. 处理服务器返回的消息,实现局部刷新。

  1. xhr.onreadystatechange = function(){
  2. let text = xhr.responseText;
  3. console.log( text );
  4. }

状态值 readyState 都会发⽣改变
0:请求未初始化,即还没有调⽤ send ⽅法;
1:服务器连接已建⽴,即已调⽤ send ⽅法,正在发送请求;
2:请求已接收,即 send ⽅法执⾏完成;
3:请求处理中,即正在解析响应内容;
4:请求已完成,且响应已就绪,即响应内容解析完成,可以在客户端进⾏调⽤了;=>只有当状态值为 4 时,才表示请求完成
   
请求完成后,判断请求状态,状态码 status 为 200 时表示请求成功

完整代码:

  1. xhr.onreadystatechange = function(){
  2. if(xhr.readyState == 4 && xhr.status == 200){
  3. let text = xhr.responseText;
  4. console.log( text );
  5. }
  6. }

三、封装自己的Ajax

AJAX 的操作是⼀种固定的模式,这让我们想到,是否能够将其操作流程封装,让我们在以后
的使⽤过程中更加⽅便。

  1. function ajax({
  2. url,
  3. success,
  4. data = {},
  5. type = "get",
  6. async = true
  7. }) {
  8. let xhr;
  9. //1、:创建 XMLHttpRequest 对象。
  10. if (window.XMLHttpRequest) {
  11. xhr = new XMLHttpRequest();
  12. } else {
  13. xhr = new ActiveXObject("Microsoft.XMLHTTP");
  14. }
  15. //2、3、:打开连接。发送 HTTP 请求。(根据类型是 get 或者 post 来决定数据 data 不同的发送⽅ 式)
  16. if ((type = type.toUpperCase()) == 'GET') {
  17. xhr.open('get', url + '?' + jsonToString(data), true);
  18. xhr.send();
  19. } else{
  20. xhr.open('post', url, true);
  21. xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded "); //⼀般数据都以该⽅式传输
  22. xhr.send(jsonToString(data));
  23. }
  24. //4、:处理服务器返回的消息,实现局部刷新。
  25. xhr.onreadystatechange = function () {
  26. if (xhr.readyState == 4) {
  27. if (xhr.status >= 200 && xhr.status < 300 || xhr.status == 304) {
  28. let data = xhr.responseText
  29. success(data);
  30. // console.log(data);
  31.  
  32. } else {
  33. // error && error();
  34. }
  35. };
  36. };
  37. //⽤来将数据由json对象转换成符合url查询部分格式的字符串,⽅便数据的传输
  38. function jsonToString(json) {
  39. var arr = [];
  40. for (var i in json) {
  41. arr.push(i + '=' + json[i]);
  42. };
  43. return arr.join('&');
  44. }
  45. }

JS DOM中Ajax的使用的更多相关文章

  1. 【JS】中ajax的URL中包含中文,后台接收乱码

    [问题]ajax提交get请求,url中参数包含中文,后台接收到显示乱码. [解决方案]前台: function getSiteInfoByName(siteName){ var res; $.aja ...

  2. JS DOM中getElement系列和querySelector系列获取节点

    节点查找方法 document.getElementById() 前面必须是document document.getElementsByName()  前面必须是document ele.getEl ...

  3. JS学习之DOM节点的关系属性封装、克隆节点、Dom中Style常用的一些属性等小结

    JS DOM节点: 在JS DOM中节点的关系被定义为节点的属性: 通常有以下几种节点之间的关系: (这里的关系是所有浏览器都支持的) parentNode    父节点 childNodes     ...

  4. JS Dom节点操作demo!

    通过黑马课程的学习,在这里分享一个js Dom中节点操作的小练习 需求:使用js创建一个4*3的表格table. onload = function(){ function c(tagName){ r ...

  5. 使用spin.js优化等待ajax返回时的页面效果

    [本文出自天外归云的博客园] 最近在做一个JIRA信息统计的系统,在统计JIRA关联信息的过程中由于需要等待ajax返回结果到前端,时间较长,所以要添加一段等待时的loading画面,使用spin.j ...

  6. prototype.js 和 jQuery.js中 ajax 的使用

    这次还是prototype.js 和 jQuery.js冲突的问题,前面说到过解决办法http://www.cnblogs.com/Joanna-Yan/p/4836252.html,以及上网说的大部 ...

  7. js中ajax如何解决跨域请求

    js中ajax如何解决跨域请求,在讲这个问题之前先解释几个名词 1.跨域请求 所有的浏览器都是同源策略,这个策略能保证页面脚本资源和cookie安全 ,浏览器隔离了来自不同源的请求,防上跨域不安全的操 ...

  8. js函数中的BOM和DOM

    BOM 浏览器对象模型  screen对象 console.log(screen.width);// 屏幕宽度 console.log(screen.height);// 屏幕高度 console.l ...

  9. 在js文件中通过jquery定位到某个dom时候设置事件时候 相当于直接在dom里面添加事件

    在js文件中通过jquery定位到某个dom时候设置事件时候 相当于直接在dom里面添加事件  当触发事件时候 会把当前的dom传给该方法

随机推荐

  1. 【Docker】初识与应用场景认知

    什么是Docker? Docker是一个容器化平台,它以容器的形式将您的应用程序及其所有依赖项打包在一起,以确保您的应用程序在任何环境中无缝运行. 什么是Docker容器? Docker容器包括应用程 ...

  2. easyUI demo2

    图片:               代码: jsp <%@ page language="java" import="java.util.*" pageE ...

  3. 基于python的分治法和例题

    分治法 分治法的核心 分:将一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题 治:最后的子问题,可以很容易的直接求解 合:所有子问题的解合并起来就是原问题的解 分治法的特征 ...

  4. [梁山好汉说IT] 梁山好汉和秒杀系统

    [梁山好汉说IT] 梁山好汉和秒杀系统 0x00 摘要 今天看了一篇好文章,里面一些思路颇值得借鉴.先摘录总结精华.然后看看梁山好汉如何处理秒杀系统(系统隔离/系统搭建/风控过滤/削峰/信号广播... ...

  5. 大白话讲解Spring的@bean注解

    1.Spring注解分类 从广义上Spring注解可以分为两类: 一类注解是用于注册Bean 假如IOC容器就是一间空屋子,首先这间空屋子啥都没有,我们要吃大餐,我们就要从外部搬运食材和餐具进来.这里 ...

  6. Ubuntu 18.04 64位安装tensorflow-gpu

    第一步(可直接跳到第二步):安装nvidia显卡驱动 linux用户可以通过官方ppa解决安装GPU驱动的问题.使用如下命令添加Graphic Drivers PPA: 1 sudo add-apt- ...

  7. jmeter 5.1版本更新说明

    版本5.1 摘要 新的和值得注意的 不兼容的变化 Bug修复 改进 非功能性变化 已知问题和解决方法 谢谢 新的和值得注意的 核心改进 JDBC测试已得到改进,能够设置init SQL语句并添加与不支 ...

  8. 利用自编码(Autoencoder)来提取输入数据的特征

    自编码(Autoencoder)介绍 Autoencoder是一种无监督的学习算法,将输入信息进行压缩,提取出数据中最具代表性的信息.其目的是在保证重要特征不丢失的情况下,降低输入信息的维度,减小神经 ...

  9. js以当前时间为基础,便捷获取时间(最近2天,最近1周,最近2周,最近1月,最近2月,最近半年,最近一年,本周,本月,本年)

    在开发公司管理后台系统时,遇到了需要根据不同的时间段如"近一年.近半年.近三月.近一月.近一周"来获取并展示不同图表数据的需求,很是繁琐,项目开发周期又非常的短,自己想了一下,虽然 ...

  10. 【DPDK】【CPU usage】DPDK应用如何计算当前系统的压力

    [前言] 使用DPDK开发的朋友应该都了解使用dpdk的fwd线程的工作模式是polling模式,即100%轮询的方式去加速网络IO,这样我们在操作系统层面上来观察目标processer会发现usag ...