Ajax 以及 Ajax基于Promise封装
AJAX - 创建 XMLHttpRequest 对象
var xmlhttp = new XMLHttpRequest();
通过打印实例对象我们发现,我们打印的是 xmlhttp 对象,里面所有的属性即是 XMLHttpRequest() 这个构造函数原型对象身上的属性, 既 XMLHttpRequest.prototype的属性
.open()
.send()
.onreadystatechange
.readyState
.status
所以,xmlhttp实例对象可以访问到这些属性,但是send()和open()存在于圆形链上,xmlhttp.__proto = XMLHttpRequest.prototype


AJAX - 向服务器发送请求请求
向服务器发送请求
如需将请求发送到服务器,我们使用 XMLHttpRequest 实例对象的 open() 和 send() 方法:
open的第二个参数url,我们需要把要请求的文件起在本地服务器上,方法在底部

第二个参数url,文件在服务器上的位置,所以说要先本地起一个服务,然后在发请求(最底部有本地起服务的方法)
1 xmlhttp.open("get", "http://localhost:3000/data", true);
2 xmlhttp.send();
AJAX - onreadystatechange 事件
当请求被发送到服务器时,我们需要执行一些基于响应的任务。
每当 readyState 改变时,就会触发 onreadystatechange 事件。
readyState 属性存有 XMLHttpRequest 的状态信息。

在 onreadystatechange 事件中,我们规定当服务器响应已做好被处理的准备时所执行的任务。
当 readyState 等于 4 且状态为 200 时,表示响应已就绪:
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
document.getElementById("myDiv").innerHTML = xmlhttp.responseText;
}
};
AJAX - 服务器 响应
如需获得来自服务器的响应,请使用 XMLHttpRequest 对象的 responseText 或 responseXML 属性

完整代码:
1 <body>
2 <div id="myDiv">
3
4 </div>
5 </body>
6 <script>
7 var xmlhttp = new XMLHttpRequest();
8 console.log(XMLHttpRequest.prototype)
9
10 console.log(xmlhttp.__proto__.send);
11
12 xmlhttp.onreadystatechange = function () {
13 if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
14 document.getElementById("myDiv").innerHTML = xmlhttp.responseText;
15 }
16 };
17
18 xmlhttp.open("get", "http://localhost:3000/obj", true);
19 xmlhttp.send();
20 </script>
1 function dataJson(url, type, data) {
2 const promise = new Promise((reslove, reject) => {
3 const xmlHttp = new XMLHttpRequest()
4 xmlHttp.open(type, url)
5 if (type == 'GET') {
6 xmlHttp.send()
7 } else {
8 xmlHttp.setRequestHeader("Content-Type", "application/json")
9 xmlHttp.send(JSON.stringify(data))
10 }
11 xmlHttp.responseType = 'json'
12
13 xmlhttp.onreadystatechange = function () {
14 if (xmlhttp.readyState != 4) return
15 if (xmlhttp.status == 200) {
16 resolve(xmlHttp.response)
17 } else {
18 reject(new Error(xmlHttp.statusText))
19 }
20 };
21
22 })
23 return promise
24 }
最后:
1. json-server
终端运行
npm init
安装json-server
npm install -g json-server
项目根目录新建 data.json 文件(就是将数据放到本地服务器上,方便ajax请求)
{
"obj": {
"title": "ajax哈哈哈"
}
}
然后配置命令
"json:server": "json-server --watch data.json"
运行
npm run json:server
输出类似以下内容,说明启动成功
\{^_^}/ hi!
Loading data.json
Done
Resources
http://localhost:3000/obj
Home
http://localhost:3000
浏览器访问 http://localhost:3000/obj,就看到数据了,ajax请求这个路径
json-server 的相关启动参数:
| 参数 | 简写 | 默认值 | 说明 |
|---|---|---|---|
| --config | -c | 指定配置文件 | [默认值: "json-server.json"] |
| --port | -p | 设置端口 [默认值: 3000] | Number |
| --host | -H | 设置域 [默认值: "0.0.0.0"] | String |
| --watch | -w | Watch file(s) | 是否监听 |
| --routes | -r | 指定自定义路由 | |
| --middlewares | -m | 指定中间件 files | [数组] |
| --static | -s | Set static files directory | 静态目录,类比:express的静态目录 |
| --readonly | --ro | Allow only GET requests [布尔] | |
| --nocors | --nc | Disable Cross-Origin Resource Sharing [布尔] | |
| --no | gzip | , --ng Disable GZIP Content-Encoding [布尔] | |
| --snapshots | -S | Set snapshots directory [默认值: "."] | |
| --delay | -d | Add delay to responses (ms) | |
| --id | -i | Set database id property (e.g. _id) [默认值: "id"] | |
| --foreignKeySuffix | -- | fks Set foreign key suffix (e.g. _id as in post_id) | [默认值: "Id"] |
| --help | -h | 显示帮助信息 | [布尔] |
| --version | -v | 显示版本号 | [布尔] |
2,express插件
Ajax 以及 Ajax基于Promise封装的更多相关文章
- 基于Promise封装uni-app的request方法,实现类似axios形式的请求
https://my.oschina.net/u/2428630/blog/3004860 uni-app框架中 安装(项目根目录下运行) npm install uni-request --save ...
- 简单的基于promise的ajax封装
基于promise的ajax封装 //调用方式: /* ajaxPrmomise({ url:, method:, headers:{} }).then(res=>{}) */ ;(functi ...
- Promise 封装 ajax
Promise 封装ajax 成链式结构: var url = 'http'; function(method, url) { return new Promise(function(res, ret ...
- vue3 专用 indexedDB 封装库,基于Promise告别回调地狱
IndexedDB 的官网 https://developer.mozilla.org/zh-CN/docs/Web/API/IndexedDB_API 这个大概是官网吧,原始是英文的,现在陆续是出中 ...
- React Native 网络请求封装:使用Promise封装fetch请求
最近公司使用React作为前端框架,使用了异步请求访问,这里做下总结: React Native中虽然也内置了XMLHttpRequest 网络请求API(也就是俗称的ajax),但XMLHttpRe ...
- 基于PROMISE解决回调地狱问题
回调地狱问题: 在使用JavaScript时,为了实现某些逻辑经常会写出层层嵌套的回调函数,如果嵌套过多,会极大影响代码可读性和逻辑,这种情况也被成为回调地狱.比如说你要把一个函数 A 作为回调函数, ...
- ES6 promise 封装http请求
今天研究了一下同事封装的http请求,用的是promise. 大结构是: const __fetch = (url, data = {}, config = {}) => { let param ...
- 基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件
目录 1. 前言 2. 关于vue-simple-uploader 3. 基于vue-simple-uploader封装全局上传组件 4. 文件上传流程概览 5. 文件分片 6. MD5的计算过程 7 ...
- 基于Promise规范的fetch API的使用
基于Promise规范的fetch API的使用 fetch的使用 作用:fetch 这个API,是专门用来发起Ajax请求的: fetch 是由原生 JS 提供的 API ,专门用来取代 XHR 这 ...
- 微信小程序ES6方法Promise封装接口
为何要封装接口? 有小程序开发的经验者,相信对微信API Request很熟悉了.对接接口时,有大部分的开发者都是直接调用request方法,去请求后台接口并渲染数据.诚然,直接使用api发起请求对接 ...
随机推荐
- Ansys-CHEMKIN-pro表面反应机制输入(Surface Kinetics Input)规则
chemkin表面反应机制文件(Ansys-CHEMKIN-pro表面反应机制输入) 1. 文件包含表面活性位(相).表面组分,固相组分.固相,热力学数据,反应机制: 2. 顺序:物质名称,活性位数据 ...
- tag 总结
通用的: (((masterpiece))),((best quality)),ultra-detailed,extremely detailed CG unity 8k wallpaper,best ...
- 在 Kubernetes 集群中部署现代应用的通用模式
在 Kubernetes 集群中部署现代应用的通用模式 摘要 我们正在经历现代应用交付领域的第二次浪潮,而 Kubernetes 和容器化则是这次浪潮的主要推动力量. 随着第二次浪潮的推进,我们在 N ...
- Python项目案例开发从入门到实战-1.4Python图形界面设计
Python提供了多个图形开发界面的库,常用的Python GUI库如下. -Tkinter:Python内置模块 -wxPython -Jython 1.4.1创建Windows窗口 import ...
- Checkmk监控工具使用手册
其实用法Checkmk官网文档很全面:https://docs.checkmk.com/latest/en/intro_setup.html 顺着beginner's guide章节看完基本就能上手, ...
- VMware虚拟机迁移至Xen
1.VMware虚拟机导出OVF文件. 2.从Citrix Xencenter导入OVf文件 3.导入时,检查Local storage disk 下disk是否正确,如果曾导入失败,重复导入会产生多 ...
- webgl 系列 —— 变换矩阵和动画
其他章节请看: webgl 系列 变换矩阵和动画 动画就是不停地将某个东西变换(transform).例如将三角形不停地旋转就是一个动画 和 CSS transform 类似,变换有三种形式:平移.缩 ...
- Axios的js文件的下载教程+相关应用
下载教程来啦! 1.进入GitHub网站,网址在这里:http://github.com 2.去搜索框搜索Axios,得到如下界面: 3.然后选择这里: 会出现如下界面: 4.点击右方的绿色按钮&qu ...
- graphviz 简单入门
上一位负责画图的选手 CS Academy 由于不明原因暂时不能继续工作,所以本俱乐部招收了新选手 graphviz. 在 Linux 上,你可以这么下载: sudo apt install grap ...
- uniapp中easycom用法详解
Uniapp中的easycom是一种组件自动注册机制,可以让开发者更加方便地使用和管理组件.下面详细介绍下关于easycom使用方法. 什么是easycom? easycom是Uniapp框架提供的一 ...