封装AJAX库(参考JQ)
//jQ方法 $.ajax([URL],[OPTIONS])
$.ajax({
url:'',
data:null,
datatype:'json',
method:'GET',
async:true,
cache:true,
success:()=>{},
error:()=>{}
})
//封装成window对象的一个方法。
(function anonymous(window) {
function AJAX(options) {
return new AJAX.prototype.init(options)
}
let init = function init(options = {}){
let {
url,
method = 'GET', //默认值用等号
data = null,
datatype = 'JSON',
async = true,
cache = true,
success,
error
} = options;
//MOUNT :将配置挂载到实例上
['url', 'method', 'data', 'datatype', 'async', 'cache', 'success',
'error'
].forEach((item) => {
this[item] = eval(item);
});
//SEND :发送请求
this.sendAjax();
};
AJAX.prototype = {
constructor: AJAX,
init,
//发送AJAX请求
sendAjax() {
this.handleDate();
this.handleCache();
let (method, url, async,error,success,data) = this;
//四部曲
let xhr = new XMLHttpRequest();
xhr.open(method, url, async);
xhr.onreadystatechange = () => {
if (!/^(2|3)\d{2}$/.test(xhr.status)) {
error && error(xhr.statusText, xhr);
return;
}
if (xhr.readyState === 4) {
let result = this.handleDataType(xhr);
success && success(result, xhr);
}
};
xhr.send();
},
//处理DATA-TYPE
handleDataType(xhr) {
let dataType = this.dataType.toUpperCase();
result = xhr.responseText;
switch (dataType) {
case 'TEXT':
break;
case 'JSON':
result = JSON.parse(result);
break;
case 'XML':
xhr.responseXML;
break;
}
return result;
},
//处理CACHE
handleCache() {
let {
url,
method,
cache
} = this;
if (/^GET$/i.test(method) && cache === false) {
url += `${check()}_=${+new Date()}`; //
}
},
//处理DATA
handleData(){
let {data,method} = this;
if(!data) return;
let str = '';
if(typeof data === 'object'){
//如果是对象,转换成x-www-form-urlencoded模式的字符串
for(let key in data){
if(data.hasOwnProperty(key)){
str += `${key}=${data[key]}&`;
}
}
data = str.substring(0,str.length-1);
}
//根据请求方式的不同,传递给服务器的也不同
if(/^(GET|DELETE|HEAD|TRACT|OPTIONS)$/i.test(method)){
this.url += `${this.check()}${data}`;
this.data = null;
return;
}
//当请求为POST时
this.data = data;
},
//检测问号
check() {
return this.url.indexOf('?')>-1?'&':'?';
}
}
init.prototype = AJAX.prototype;
window.ajax = AJAX;
})(window)
//直接ajax(options),options为一个对象
封装AJAX库(参考JQ)的更多相关文章
- 封装ajax库,post请求
http状态码406是服务器无法根据客户端请求的内容特性完成请求 //整站功能方法库封装ajax请求,这里只针对post var methods = { //全站ajax请求状态处理 ajax: fu ...
- Blazor组件自做一 : 使用JS隔离封装viewerjs库
Viewer.js库是一个实用的js库,用于图片浏览,放大缩小翻转幻灯片播放等实用操作 本文相关参考链接 JavaScript 模块中的 JavaScript 隔离 Viewer.js工程 Blazo ...
- 封装ajax,让调用变得简单优化
思考一下: 通常我们在使用ajax来发送接口请求时,每一次都会调用ajax固定的元素,比如data.url.method.success.error等.那么我们想一下能不能先把ajax封装起来,在每次 ...
- 原生JS封装ajax方法
http://blog.sucaijiayuan.com/article/89 jquery框架的ajax方法固然好用,但是假如某天我们的项目不能引入jquery或项目需求很简单,没有很多交互功能,只 ...
- 前后端交互之封装Ajax+SpringMVC源码分析
为什么需要封装呢?因为用的多,我想将其封装成函数,当我想用它时,只需将那个函数对应的js文件引入即可,而不要重复写很多相同代码,利于开发效率的提高. 无论是$.ajax或$.post.$.get等,在 ...
- JavaScript封装Ajax工具函数及jQuery中的ajax,xhr在IE的兼容
封装ajax工具函数 首先要思考:1.为什么要封装它?提高开发效率2.把一些不确定的情况考虑在其中 a. 请求方式 b. 请求地址 c. 是否异步 d. 发送参数 e. 成功处理 f. 失败处理3.确 ...
- 封装ajax支持get、post
为什么要封装ajax,因为…… for(var i=0;i<20;i++){ $.ajax(……) } 的时候,整个页面都卡死了,于是,我开始找答案. 后来,找到了,就是jquery的ajax属 ...
- 自封装ajax
项目中有时候用不到jq,需要了解xmlhttp原理,自己写一套函数请求和发送数据! /* 封装ajax函数 * @param {string}opt.type http连接的方式,包括POST和GET ...
- 封装Ajax和跨域
目录 引言 封装ajax 案例:使用自封装ajax 案例:动态加载瀑布流 跨域 引言 对于Ajax现在相信大家已经不会陌生了,无论是原生的XMLHttpRequest方式发送还是通过jQuery框架中 ...
随机推荐
- C++ STL partial_sort_copy iterator
vector<int>::iterator iter1 = partial_sort_copy(deq1.begin(), deq1.end(), vec1.begin(), vec1.e ...
- Java NIO学习笔记八 Pipe
Java NIO Pipe Java NIO管道是两个线程之间的单向数据连接.Pipe 具有源信道和接受通道.您将数据写入sink通道.然后可以从源通道读取该数据. 这是一个原理的Pipe流程图: J ...
- TFTP反射放大攻击浅析
0x00 前言 经由@杀戮提示,让我看看softpedia上的这篇报道,咱就来研究一下文中的使用TFTP(Trivial File Transfer Protocol,简单文件传输协议)进行反射型DD ...
- python基础--字符串、元组
字符串方法 注:字符串和元组一样都是不可变的,以下函数不会改变原来字符串的值,可以将其赋给一个新的变量 st='a b c d,f,g' st_list=st.split()#字符串分割,参数不写,按 ...
- 最新 迅雷java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.迅雷等10家互联网公司的校招Offer,因为某些自身原因最终选择了迅雷.6.7月主要是做系统复习.项目复盘.LeetCode ...
- 自己对flash memory的总结
1.综述类文章 1.A Survey of Storage Management in Flash based Data 2.Understanding the Flash Translation L ...
- 学习笔记:CentOS7学习之二十四:expect-正则表达式-sed-cut的使用
目录 学习笔记:CentOS7学习之二十四:expect-正则表达式-sed-cut的使用 24.1 expect实现无交互登录 24.1.1 安装和使用expect 24.2 正则表达式的使用 24 ...
- poj1410(判断线段和矩形是否相交)
题目链接:https://vjudge.net/problem/POJ-1410 题意:判断线段和矩形是否相交. 思路:注意这里的相交包括线段在矩形内,因此先判断线段与矩形的边是否相交,再判断线段的两 ...
- 拯救你丢失的精度——BigInteger和BigDecimal类(入门)
第三阶段 JAVA常见对象的学习 BigInteger和BigDecimal类 BigInteger类 (一) 构造方法: //针对超过整数范围的运算(整数最大值:2147483647) BigInt ...
- Git Bash输错账号密码如何重新输入
很多时候我们容易在Git Bash操作的时候,不慎输入错误的用户名或密码,此时一直提示: remote: Incorrect username or password ( access token ) ...