XMLHttpRequest 简单封装
当开发简单页面的时候,不需要引入任何js库,这时需要封装一个用到 XMLHttpRequest 对象的好用的接口请求。
simple 封装如下
ajaxRequest({
url: '',
method: 'POST',
type: 'json',
data: {},
success: function(res) {
console.log(res)
},
erro: function(err) {
console.log(err)
}
})
function ajaxRequest(option) {
// 1. 首先简单验证传进来的参数是否合法
if(Object.prototype.toString.call(option) !== '[object, Object]') return undefined;
// 2. 对参数容错处理
option.method = option.method ? option.method.toUpperCase() : 'GET'; // 默认 GET 请求
option.data = option.data || {};
option.type = option.type || 'json';
// 3. 如果是 GET 请求,需要处理 data 里的数据并且以一定的规则拼接到 url 后
var formData = [];
for(key in option.data) { // Object.keys.forEach
formData.push(''.concat(key, '=', option.data[key]))
}
option.data = formData.join('&') //eg: a=b&c=d&e=f
if(option.method === 'GET' && formData.lenght > 0) { // 注意,option.data 为空对象的时候,就不用拼接参数了
// 连接本身有参数的时候拼接 &option.data,如果本身没有参数拼接 ?option.data
option.url += location.search.length === 0 ? ''.concat('?', option.data) : ''.concat('&', option.data);
}
// 4. 实例化 XMLHttpRequest 对象,并进行一些设置
var xhr = new XMLHttpRequest();
xhr.responseType = option.type;
xhr.withCredentials = false; //指示是否应使用Cookie或授权标头等凭据进行跨站点访问控制请求。
// 5. 处理请求回调
xhr.onreadystatechange = function() {
if(xhr.readyState === 4) {
if(xhr.status === 200) {
if(option.success && typeof option.success === 'function') {
option.success(xhr.response)
}
} else {
if(option.error && typeof option.error === 'function') {
option.error(new Error(xhr.statusText))
}
}
}
}
xhr.open(option.method, option.url, true); // true 代表是异步请求
// 6. 如果是 POST 请求,需要设置请求头
if (option.method === 'POST') {
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
}
// 7. 发送请求
xhr.send(option.method === 'POST' ? option.data : null);
}
XMLHttpRequest 简单封装的更多相关文章
- axios简单封装
写在最前面 新手前端刚刚接触vue,感觉真的好用.项目中需要使用axios,然后学习了一下.借鉴网上一些大佬的经验,现在分享一下axios的简单封装,如果有什么错误的地方,请大家指出. axios安装 ...
- 用XHR简单封装一个axios
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Jquery Ajax简单封装(集中错误、请求loading处理)
Jquery Ajax简单封装(集中错误.请求loading处理) 对Jquery Ajax做了简单封装,错误处理,请求loading等,运用到项目中集中处理会很方便. 技术层面没有什么好说的,请求是 ...
- 使用原生ajax及其简单封装
原生ajax配置详解 // 原生ajax // 1. 创建ajax对象 if(window.XMLHttpRequest){ // // IE7+, Firefox, Chrome, Opera, S ...
- Android AsyncTask 深度理解、简单封装、任务队列分析、自定义线程池
前言:由于最近在做SDK的功能,需要设计线程池.看了很多资料不知道从何开始着手,突然发现了AsyncTask有对线程池的封装,so,就拿它开刀,本文将从AsyncTask的基本用法,到简单的封装,再到 ...
- FMDB简单封装和使用
工具:火狐浏览器+SQLite Manager插件 ; Xcode; FMDB库; 效果: 项目地址: https://github.com/sven713/PackFMDB 主要参考这两篇博客: 1 ...
- Android--Retrofit+RxJava的简单封装(三)
1,继续接着上一篇的讲讲,话说如果像上一篇这样的话,那么我们每一次请求一个结构都要创建一堆的Retrofit对象,而且代码都是相同的,我们可以试试封装一下 先创建一个HttpMethods类,将Ret ...
- okhttp3 get post 简单封装
最近打算在新项目中使用 okhttp3, 简单封装了一下异步 get post 因为 CallBack 也是在子线程中执行,所以用到了 Handler public class MyOkHttpCli ...
- python网页请求urllib2模块简单封装代码
这篇文章主要分享一个python网页请求模块urllib2模块的简单封装代码. 原文转自:http://www.jbxue.com/article/16585.html 对python网页请求模块ur ...
随机推荐
- JavaScript Object的复制
var obj = { a: 1, b: 2, c: { d: 3, e: 4, f: function () { console.log("对象复制"); } } } 1. fo ...
- UOJ 422 [集训队作业2018] 小Z的礼物 min-max容斥 期望 轮廓线dp
LINK:小Z的礼物 太精髓了 我重学了一遍min-max容斥 重写了一遍按位或才写这道题的. 还是期望多少时间可以全部集齐. 相当于求出 \(E(max(S))\)表示最后一个出现的期望时间. 根据 ...
- JDK下载和安装教程,超详细
下载并安装JDK JDK的全称是JavaSE Development Kit,即java开发工具包,是sun公司提供的一套用于开发java应用程序的开发包,它提供了编译.运行java程序所需的各种工具 ...
- 【python接口自动化】- ConfigParser配置文件的使用
前言:目前我们使用的绝大多数计算机程序,无论是办公软件,浏览器,甚至游戏.视频都是通过菜单界面系统配置的,它几乎成了我们使用机器的默认方式.而在python中,也有这样的一个配置模块可以把代码可配置化 ...
- Android Spinner的简单用法。
今天学到的是spinner,就是下拉列表,这可不是ExpandListView哈. 闲话不解释.这是控件,所以先上布局:就不上线性布局了,基本上可以总结出,控件都得在布局里写,写之前嵌个布局就行. & ...
- (转)Qt添加windows开机自启动
原博文地址为:https://blog.csdn.net/x356982611/article/details/53183144 简介 window下开机启动最简单的实现方式就是在注册表中添加启动项目 ...
- 验证Kubernetes YAML的最佳实践和策略
本文来自Rancher Labs Kubernetes工作负载最常见的定义是YAML格式的文件.使用YAML所面临的挑战之一是,它相当难以表达manifest文件之间的约束或关系. 如果你想检查所有部 ...
- 大型企业都在用的Python反爬虫手段,破了它!
SVG 映射反爬虫 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那么针对这三类人 ...
- ROS 八叉树地图构建 - 安装 octomap 和 octomap_server 建图包!
项目要用到八叉树库 Octomap 来构建地图,这里记录下安装.可视化,并启用带颜色的 Octomap 的过程. 一.Apt 安装 Octomap 库 如果你不需要修改源码,可以直接安装编译好的 oc ...
- java 的API及Object类
一 Java的API Java 的API(API: Application(应用) Programming(程序) Interface(接口)) Java API就是JDK中提供给我们使用的类,这些类 ...