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 ... 
随机推荐
- C/C++编程笔记:C++入门知识丨认识C++的函数和对象
			一. 本篇要学习的内容和知识结构概览 二. 知识点逐条分析 1. 混合型语言 C++源文件的文件扩展名为.cpp, 也就是c plus plus的简写, 在该文件里有且只能有一个名为main的主函数, ... 
- 排序HEOI2016/TJOI2016 二分+线段树判定
			LINK:排序 此题甚好我一点思路都没有要是我当时省选此题除了模拟我恐怕想不到还可以二分 还可以线段树... 有点ex 不太好写 考虑 暴力显然每次给出询问我们都是可以直接sort的 无视地形无视一切 ... 
- Spring学习总结(8)-接口多个实现类的动态调用
			需求描述:当一个接口有2个以上的实现类时,调用方需要根据参数选择只其中一个实现类 Spring版本:5.1.8.RELEASE 1. 接口和实现类 /** * 接口 */ public interfa ... 
- 埋在MySQL数据库应用中的17个关键问题!
			作者:扎瓦陈序元 来源:https://blog.csdn.net/weixin_42882439 MySQL的使用非常普遍,跟MySQL有关的话题也非常多,如性能优化.高可用性.强一致性.安全.备份 ... 
- 2020牛客暑期多校训练营(第八场)K-Kabaleo Lite题解
			K-Kabaleo Lite 题目大意: 给出每种菜品的利润以及碟数,要求我们给每个客人至少一碟菜,要求从1号菜品开始给,给的菜品的号码是连续的,每个客人同号码的菜都只能给一碟.求能招待客人的最大数量 ... 
- 云服务器远程连接mysql数据库
			首先需要在云服务器上,下载安装好mysql与Navicat. mysql下载好以后,打开云端的开始,找到mysql的命令窗,进入输入自己的mysql密码,稍等片刻进入mysql数据库 进入之后输入下列 ... 
- css笔记  定位的分类
			定位:解决元素摆放的问题 使用定位可以将元素摆放到任意位置 分类 1.默认的定位 块元素垂直排列,行内元素左右排列,称之为流 流:元素有序排列而形成的队伍 特殊的定位 浮动定位:可以让块元素左右排列 ... 
- 如何将ppt演示文稿上传到微信公众号?
			如何将ppt演示文稿上传到微信公众号? 我们都知道创建一个微信公众号,在公众号中发布一些文章是非常简单的,但公众号添加附件下载的功能却被限制,如今可以使用小程序“微附件”进行在公众号中添加附件. 以下 ... 
- ECS7天实践进阶训练营Day1:使用阿里云ECS,快速搭建、管理VuePress静态网站
			一.概述 VuePress是2018年由尤雨溪发布的一个全新的基于Vue的静态网站生成器,它是一个非常轻量级的静态网站生成器.VuePress主要用于生成技术文档,其类似于Gitbook,我们可以用于 ... 
- C#LeetCode刷题-Map
			Map篇 # 题名 刷题 通过率 难度 846 一手顺子 33.7% 中等 855 考场就座 20.8% 中等 
