• 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>
 Promise对象实现Ajax封装
 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封装的更多相关文章

  1. 基于Promise封装uni-app的request方法,实现类似axios形式的请求

    https://my.oschina.net/u/2428630/blog/3004860 uni-app框架中 安装(项目根目录下运行) npm install uni-request --save ...

  2. 简单的基于promise的ajax封装

    基于promise的ajax封装 //调用方式: /* ajaxPrmomise({ url:, method:, headers:{} }).then(res=>{}) */ ;(functi ...

  3. Promise 封装 ajax

    Promise 封装ajax 成链式结构: var url = 'http'; function(method, url) { return new Promise(function(res, ret ...

  4. vue3 专用 indexedDB 封装库,基于Promise告别回调地狱

    IndexedDB 的官网 https://developer.mozilla.org/zh-CN/docs/Web/API/IndexedDB_API 这个大概是官网吧,原始是英文的,现在陆续是出中 ...

  5. React Native 网络请求封装:使用Promise封装fetch请求

    最近公司使用React作为前端框架,使用了异步请求访问,这里做下总结: React Native中虽然也内置了XMLHttpRequest 网络请求API(也就是俗称的ajax),但XMLHttpRe ...

  6. 基于PROMISE解决回调地狱问题

    回调地狱问题: 在使用JavaScript时,为了实现某些逻辑经常会写出层层嵌套的回调函数,如果嵌套过多,会极大影响代码可读性和逻辑,这种情况也被成为回调地狱.比如说你要把一个函数 A 作为回调函数, ...

  7. ES6 promise 封装http请求

    今天研究了一下同事封装的http请求,用的是promise. 大结构是: const __fetch = (url, data = {}, config = {}) => { let param ...

  8. 基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件

    目录 1. 前言 2. 关于vue-simple-uploader 3. 基于vue-simple-uploader封装全局上传组件 4. 文件上传流程概览 5. 文件分片 6. MD5的计算过程 7 ...

  9. 基于Promise规范的fetch API的使用

    基于Promise规范的fetch API的使用 fetch的使用 作用:fetch 这个API,是专门用来发起Ajax请求的: fetch 是由原生 JS 提供的 API ,专门用来取代 XHR 这 ...

  10. 微信小程序ES6方法Promise封装接口

    为何要封装接口? 有小程序开发的经验者,相信对微信API Request很熟悉了.对接接口时,有大部分的开发者都是直接调用request方法,去请求后台接口并渲染数据.诚然,直接使用api发起请求对接 ...

随机推荐

  1. element ui 全选反选

    <el-checkbox class="selectAll" :indeterminate="isIndeterminate" v-model=" ...

  2. ffmpeg均匀分割视频命令

    ffmpeg -y -i input.wav -f segment -segment_time 5 output-%d.wav -segment_time 分割视频片段大小 -segmenet_lis ...

  3. ZooKeeper启动报错,未成功开启服务

    1.问题示例 (1)启动ZooKeeper服务报错 [Hadoop@master ~]$ zkServer.sh statusZooKeeper JMX enabled by defaultUsing ...

  4. Windows 10 输入法(仅桌面) %100 解决

    大家好,今天我遇到了一件非常难受的一件事,那就是 WIndows 自带的输入发问题,无法输入中文!!! 这时我去网上找找解决方案,总结了一下几个: 文件检查 步骤 以管理员身份运行PowerShell ...

  5. 智汇成城 ,创赢未来 | AI+产业峰会智慧城市专场在深成功举办!

    11月4日下午,由福田区人才工作局指导,广州英码信息科技有限公司和共达地创新技术(深圳)有限公司联合主办,深圳市人工智能行业协会承办的AI+产业峰会之智慧城市专场活动在深圳市南山区成功举办. &quo ...

  6. 【Leetcode】 剑指offer:链表(简单)--Day02

    剑指Offer 06. 从尾到头打印链表 可借助栈. 或先遍历列表得到元素数,开辟数组空间倒序填入. 剑指 Offer 24. 反转链表 可借助栈: class Solution { public L ...

  7. Switch问题

    package com.company;public class Main { public static void main(String[] args) { Income[] incomes = ...

  8. Checkmk监控工具使用手册

    其实用法Checkmk官网文档很全面:https://docs.checkmk.com/latest/en/intro_setup.html 顺着beginner's guide章节看完基本就能上手, ...

  9. 基于LAMP搭建WordPress博客

    1.安装Apache. 1)执行如下命令,安装Apache服务及其扩展包. yum -y install httpd mod_ssl mod_perl mod_auth_mysql 2)执行如下命令, ...

  10. 深入理解 Python 虚拟机:复数(complex)的实现原理及源码剖析

    深入理解 Python 虚拟机:复数(complex)的实现原理及源码剖析 在本篇文章当中主要给大家介绍在 cpython 虚拟机当中是如何实现 复数 complex 这个数据类型的,这个数据类型在 ...