JS DOM中Ajax的使用
一、概念
全称: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的使用的更多相关文章
- 【JS】中ajax的URL中包含中文,后台接收乱码
[问题]ajax提交get请求,url中参数包含中文,后台接收到显示乱码. [解决方案]前台: function getSiteInfoByName(siteName){ var res; $.aja ...
- JS DOM中getElement系列和querySelector系列获取节点
节点查找方法 document.getElementById() 前面必须是document document.getElementsByName() 前面必须是document ele.getEl ...
- JS学习之DOM节点的关系属性封装、克隆节点、Dom中Style常用的一些属性等小结
JS DOM节点: 在JS DOM中节点的关系被定义为节点的属性: 通常有以下几种节点之间的关系: (这里的关系是所有浏览器都支持的) parentNode 父节点 childNodes ...
- JS Dom节点操作demo!
通过黑马课程的学习,在这里分享一个js Dom中节点操作的小练习 需求:使用js创建一个4*3的表格table. onload = function(){ function c(tagName){ r ...
- 使用spin.js优化等待ajax返回时的页面效果
[本文出自天外归云的博客园] 最近在做一个JIRA信息统计的系统,在统计JIRA关联信息的过程中由于需要等待ajax返回结果到前端,时间较长,所以要添加一段等待时的loading画面,使用spin.j ...
- prototype.js 和 jQuery.js中 ajax 的使用
这次还是prototype.js 和 jQuery.js冲突的问题,前面说到过解决办法http://www.cnblogs.com/Joanna-Yan/p/4836252.html,以及上网说的大部 ...
- js中ajax如何解决跨域请求
js中ajax如何解决跨域请求,在讲这个问题之前先解释几个名词 1.跨域请求 所有的浏览器都是同源策略,这个策略能保证页面脚本资源和cookie安全 ,浏览器隔离了来自不同源的请求,防上跨域不安全的操 ...
- js函数中的BOM和DOM
BOM 浏览器对象模型 screen对象 console.log(screen.width);// 屏幕宽度 console.log(screen.height);// 屏幕高度 console.l ...
- 在js文件中通过jquery定位到某个dom时候设置事件时候 相当于直接在dom里面添加事件
在js文件中通过jquery定位到某个dom时候设置事件时候 相当于直接在dom里面添加事件 当触发事件时候 会把当前的dom传给该方法
随机推荐
- C++Review5_Swap交换
面试中可能会问到交换两个变量的值有几种实现方式,对这方面有一定了解还是有必要的,简单罗列一下几种方式,具体介绍查看参考链接: 1.中间变量:->这个最常见了 2.加减法: 3.异或法: 4.sw ...
- (转)hibernate缓存机制详细分析
在本篇随笔里将会分析一下hibernate的缓存机制,包括一级缓存(session级别).二级缓存(sessionFactory级别)以及查询缓存,当然还要讨论下我们的N+1的问题. 随笔虽长,但我相 ...
- Visio图表应用
两种方式创建 插入图表之后通过设计面板的更改图表类型进行更改 双击图表进入编辑状态. 组合其中组合图的利用 下面是图表编辑操作: 双击进入图表之后下方会有“Chart1”跟“Sheet1”两个板块 而 ...
- visio基础
右下角是一个切换文件的按钮 也可以用ctrl+tab键进行切换 页面底部左边是一个页面的增加与切换的几个按钮 这是切换页面不是切换文件 右上角这个按钮是一个功能隐藏的按钮 左上角这个按钮可以自定义快速 ...
- 第二阶段:2.商业需求分析及BRD:7.商业需求文档3
BRD模版 阐述需求来源以及调研分析情况 百度指数工具.定量的数据.发展趋势,是否与公司的战略冲突.环境政策:比如做内容的运营. 决策层看重的! 第二大块. 通过什么方式解决这个需求. 规划能力.类似 ...
- ubuntu手动升级系统
之前自己安装的是ubuntu14.04,现在需要升级到16.04,于是上网搜索了一下升级步骤以及相关命令,将这些整理出来分享给大家,希望能够给大家提供帮助. 1.更新资源: sudo apt-get ...
- Linux常用命令大全(四)
Linux常用命令大全(四) shell的特点 ☆组合新命令 ☆提供了文件名扩展字符 ☆直接使用shell的内置命令 ☆灵活地使用数据流 ☆结构化的程序模块 ☆在后台执行命令 ☆可配置的环境 ☆高级的 ...
- 负载均衡基本原理与lvs
前言: 之前在山西的项目上使用的是lvs下的NAT模式,但另外两个模式并没有涉及,今天系统的整理下关于负载均衡的相关理论与lvs各模式的相关优点与不足,知其然与所以然,而后能针对性的应用: 基本介绍 ...
- AtomicXXX系列类使用分析
本博客系列是学习并发编程过程中的记录总结.由于文章比较多,写的时间也比较散,所以我整理了个目录贴(传送门),方便查阅. 并发编程系列博客传送门 在java.util.concurrent.atomic ...
- 【记】Linux下安装JDK1.7
Java官网已经不提供除最新版本以外版本的JDK下载了,下载JDK1.7,密码: rsqg 本地Linux系统为Centos6.9,本身就没安装Java:已安装Java需要先卸载,卸载方法请百度. 1 ...