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 ...
随机推荐
- JDK8的Optional用法
参考资料:https://www.baeldung.com/java-optional https://mp.weixin.qq.com/s/P2kb4fswb4MHfb0Vut_kZg 1. 描述 ...
- java学习day01之String的特点,如何实现,并且有哪些重要方法?
1.以主流的JDK版本1.8来说,String内部实际存储结构为char数组,源码如下: public final class String implements java.io.Serializa ...
- JAVA的基本程序设计结构(下)
字符串 Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义类,叫做 String. String e=""; //an empty String String ...
- CentOS7 安装 SonarQube
安装 SonarQube 环境 系统 CentOS 7 数据库 postgresql 10 系统配置 查看系统配置 sysctl vm.max_map_count sysctl fs.file-max ...
- JavaScript calss语法糖
JavaScript calss语法糖 基础知识 严格意义上来讲,在Js中是没有类这一概念的. 我们可以运用前面章节提到的构造函数来模拟出类这一概念,并且可以通过原型对象的继承来完美的实现实例对象方法 ...
- Java 设置、删除、获取Word文档背景(基于Spire.Cloud.SDK for Java)
本文介绍使用Spire.Cloud.SDK for Java 提供的BackgroundApi接口来操作Word文档背景的方法,可设置背景,包括设置颜色背景setBackgroundColor().图 ...
- 搭建 springboot selenium 网页文件转图片环境
1. 环境准备 需要有 chrome 浏览器 + chrome driver + selenium 客户端 离线 chrome 下载地址 # 64位 linux 系统 https://dl.googl ...
- angular.js 本地数据存储LocalStorage
定义工厂模式 factory 本地存储数据服务 app.factory('locals', ['$window', function ($window) { return { //存储单个属性 se ...
- C++字符串转整形、浮点型stof()、atoi()、strtol()等
头文件:#include<stdlib.h>string str;stof:float val=stof(str);atoi:int val=atoi(str);atol:long val ...
- Kerberos认证原理及基于Kerberos认证的NFS文件共享
目录 Kerberos认证原理 简介 client访问server过程 一.Authentication Service Exchange (AS Exchange) 二.Ticket Grantin ...