一、概念

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

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

二、步骤

1. 创建 XMLHttpRequest 对象。

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

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

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

2. 打开连接。

格式:

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

例子:

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

3. 发送 HTTP 请求。

xhr.send();

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

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

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

xhr.onreadystatechange = function(){
let text = xhr.responseText;
console.log( text );
}

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

完整代码:

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

三、封装自己的Ajax

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

function ajax({
url,
success,
data = {},
type = "get",
async = true
}) {
let xhr;
//1、:创建 XMLHttpRequest 对象。
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest();
} else {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
//2、3、:打开连接。发送 HTTP 请求。(根据类型是 get 或者 post 来决定数据 data 不同的发送⽅ 式)
if ((type = type.toUpperCase()) == 'GET') {
xhr.open('get', url + '?' + jsonToString(data), true);
xhr.send();
} else{
xhr.open('post', url, true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded "); //⼀般数据都以该⽅式传输
xhr.send(jsonToString(data));
}
//4、:处理服务器返回的消息,实现局部刷新。
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
if (xhr.status >= 200 && xhr.status < 300 || xhr.status == 304) {
let data = xhr.responseText
success(data);
// console.log(data); } else {
// error && error();
}
};
};
//⽤来将数据由json对象转换成符合url查询部分格式的字符串,⽅便数据的传输
function jsonToString(json) {
var arr = [];
for (var i in json) {
arr.push(i + '=' + json[i]);
};
return arr.join('&');
}
}

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. 理解C/C++的复杂声明

      理解C/C++的复杂声明        曾经碰到过让你迷惑不解.类似于int * (* (*fp1) (int) ) [10];这样的变量声明吗?本文将由易到难,一步一步教会你如何理解这种复C/C ...

  2. 【抖音测试开发日常实习】一二三四面面经,攒人品求Offer

    总结: 一.流程 (估计)一面二面技术leader面,三面部门领导面,四面肯定是HR面 二.系统 用的牛客网面试系统,长相大概是这样:   打字聊天框我在听不清对面声音的时候用过,感觉没啥卵用,手撕代 ...

  3. ELK学习实验010:Logstash简介

    Logstash是具有实时流水线功能的开源数据收集引擎.Logstash可以动态统一来自不同来源的数据,并将数据规范化为您选择的目标.清除所有数据并使其民主化,以用于各种高级下游分析和可视化用例. 虽 ...

  4. 【温故知新】Java web 开发(一) 新建项目

    简述本文写作目的:本文主要用于回忆基础 java web 项目的搭建,在不使用 Spring 等框架的前提下,单纯使用 jsp 和 servlet 完成. 1. 新建 maven 项目,不使用 arc ...

  5. $bzoj3872\ [Poi2014]\ Ant\ colony$ 二分+$dp$

    正解:二分+$dp$ 解题报告: 传送门$QwQ$ 一年过去了依然没有头绪,,,$gql$的$NOIp$必将惨败了$kk$. 考虑倒推,因为知道知道除数和答案,所以可以推出被除数的范围,然后一路推到叶 ...

  6. 洛谷$P1600$ 天天爱跑步 树上差分

    正解:树上差分 解题报告: 传送门$QwQ$! 这题还挺妙的,,,我想了半天才会$kk$ 首先对一条链$S-T$,考虑先将它拆成$S-LCA$和$LCA-T$,分别做.因为总体上来说差不多接下来我就只 ...

  7. Linux上查找最大文件的 3 种方法

    有时候我们在系统上安装了数十个应用程序,随着使用时间的推移,许多文件变得越来越大,从而导致磁盘空间越来越小.那么问题来了,如何找到系统上这些大文件,然后进行一番磁盘空间清理呢,这篇文章就此介绍几种查找 ...

  8. JWT实现授权认证

    目录 一. JWT是什么 二. JWT标准规范 三. 核心代码简析 四. 登录授权示例 五. JWT 使用方式 六. JWT注意事项 一. JWT是什么 JSON Web Token(JWT)是目前最 ...

  9. bootstrap:导航分页

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name ...

  10. linux入门系列4--vi/vim编辑器

    上一篇文章"linux入门系列3--linux远程登陆工具"讲解了如何使用常用的工具远程连接和管理linux服务器,要管理服务器必然会涉及到脚本文件的创建.编辑工作,因此在介绍命令 ...