用XHR简单封装一个axios
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>XHR</title>
</head>
<body>
<div>
<button onclick="testGet()">GET请求</button>
<button onclick="testPost()">POST请求</button>
<button onclick="testPut()">PUT请求</button>
<button onclick="testDelete()">DELETE请求</button>
</div> <script>
function testGet() {
axios({
url: "http://localhost:3000/posts",
params: {
id: 1
}
}).then(
response => {
console.log(response);
},
error => {
console.log(error.message);
}
);
} function testPost() {
axios({
url: "http://localhost:3000/posts",
method: "POST",
data: {
title: "--POST添加上去的",
author: "--POST添加---",
id: 4
}
}).then(
response => {
console.log(response);
},
error => {
console.log(error.message);
}
);
} // axios 简单封装
function axios({ url, method = "GET", params = {}, data = {} }) {
// 返回一个promise对象
return new Promise((resolve, reject) => { // 处理metho(转大写)
method = method.toUpperCase()
// 处理query参数(拼接到url上) id=1&aaa=ccc
/*{
id: 1,
aaa: ccc
}*/
let queryString = "";
Object.keys(params).forEach(key => {
queryString += `${key}=${params[key]}&`;
});
// 判断queryString有没有值
if (queryString) {
// 去除最后的&
queryString = queryString.substring(0, queryString.length - 1);
// 接到url上
url += "?" + queryString;
}
console.log(queryString);
// 1.执行异步ajax请求
// 创建xhr对象
const request = new XMLHttpRequest(); // 打开链接(初始化请求,没有请求)
request.open(method, url, true);
// 发送请求
if (method === "GET") {
request.send();
} else if (method === "POST") {
request.setRequestHeader(
"Content-Type",
"application/json;charset=utf-8"
); // 告诉服务器请求体的格式是JSON格式
request.send(JSON.stringify(data)); // 发送JSON格式的请求体参数
} //绑定状态改变的监听
request.onreadystatechange = function() {
// 如果请求没有完成,直接结束
if (request.readyState !== 4) {
return;
}
// 如果响应状态码在[200,300)之间表示请求成功,否则失败
const { status, statusText } = request;
if (status >= 200 && status < 300) {
// 准备结果数据对象response
const response = {
data: JSON.parse(request.response),
status,
statusText
};
// 2.1如果请求成功了,调用resolve()
resolve(response);
} else {
// 2.2如果请求失败,调用reject()
reject(new Error("request error status is " + status));
}
};
});
}
</script>
</body>
</html>
用XHR简单封装一个axios的更多相关文章
- Swift - 简单封装一个工具类模板
创建模板类(封装一个类) 例1:新建一个名字叫做 Product 的类 Product.swift File 的内容 class Product { var name: String var desc ...
- 利用jdbc简单封装一个小框架(类似DBUtils)
利用jdbc写的一个类似DBUtils的框架 package com.jdbc.orm.dbutils; import java.io.IOException; import java.io.Inpu ...
- 封装一个axios请求后台的通用方法
import axios from 'axios'; import constant from '@/js/const'; import alert from '@/js/alertView'; le ...
- es6 简单封装一个 省市县三级下拉框
废话不多说,直接上效果图和代码: 1,index.js function $(el){ return document.getElementById(el) } let render = Symbol ...
- 基于iview 封装一个vue 表格分页组件
iview 是一个支持中大型项目的后台管理系统ui组件库,相对于一个后台管理系统的表格来说分页十分常见的 iview是一个基于vue的ui组件库,其中的iview-admin是一个已经为我们搭好的后天 ...
- swift开发之--简单封装Alamofire请求类以及简单使用SnapKit
以前在swift3的时候,写过类似的,那个时候还没有很成熟的网络请求类库,在这里,还是衷心感谢大神们的付出! 具体效果如下,先上图: 点击按钮的时候,请求数据,数据结构如下: { ; reason = ...
- vue axios 简单封装以及思考
先安装 axios npm install axios axios的详细介绍以及用法 就不多说了请 移步 github ➡️ https://github.com/axios/axios 下面是简单 ...
- 简单封装axios api
可以在代码逻辑中写axios请求,处理请求结果,但是随着项目越来越大,代码会很繁琐,不容易维护,所以,可以把一些在所有请求中都要处理的逻辑抽取出来,封装成api方法.比如每次请求中都要判断是否有权限, ...
- axios简单封装
写在最前面 新手前端刚刚接触vue,感觉真的好用.项目中需要使用axios,然后学习了一下.借鉴网上一些大佬的经验,现在分享一下axios的简单封装,如果有什么错误的地方,请大家指出. axios安装 ...
随机推荐
- jquery获取表单中的数据
<form> <input name="username" type="text"/&g ...
- C#线程学习笔记九:async & await入门二
一.异步方法返回类型 只能返回3种类型(void.Task和Task<T>). 1.1.void返回类型:调用方法执行异步方法,但又不需要做进一步的交互. class Program { ...
- 爬虫(六):XPath、lxml模块
1. XPath 1.1 什么是XPath XPath(XML Path Language) 是一门在XML和HTML文档中查找信息的语言,可用来在XML和HTML文档中对元素和属性进行遍历. 1.2 ...
- 升级sharepoint2013遇到的坑
现在要将sharepoint2010,ProjectServer2010升级到2016的版本,需要先升级到2013的版本. 按照官方文档,瞎搞将sharepoint2010升级到2013的版本,中间出 ...
- Linux ipv6 无状态 设置为 eui64
Linux ipv6 无状态 设置为 eui64 转载注明来源: 本文链接 来自osnosn的博客,写于 2019-08-22. 无状态的ipv6有eui64和stable-privacy模式, 在家 ...
- Spring Boot 静态资源能加载css 不能加载js
Spring Boot 配置拦截器的时候默认 是放行 静态资源 , 也就是说不需要进行配置 registry.addResourceHandler("/**") .addResou ...
- Fabric-Ca使用
Fabric-Ca的概念不再解释了,这里只说明使用方法: 前置条件 Go语言1.10+版本 GOPATH环境变量正确设置 已安装libtool和libtdhl-dev包 Ubuntu系统 通过以下命令 ...
- Centos7部署mysql
安装mysql yum install mysql mysql-server 会出现以下错误: [root@yl-web yl]# yum install mysql-server Loaded pl ...
- Java生鲜电商平台-优惠券功能设计与开发(小程序/APP)
Java生鲜电商平台-优惠券功能设计与开发(小程序/APP) 说明:Java生鲜电商平台-优惠券功能设计与开发(小程序/APP) 目录 1.项目背景与需求分析 2.需求目的与功能点列表 3.业务逻辑 ...
- 如何在linux上有2个python的情况下安装gensim
安装python的问题 https://blog.51cto.com/liqingbiao/2083869 安装gensim https://blog.csdn.net/zhujiyao/articl ...