04.封装ajax
<script>
//封装ajax
// 函数名 ajax
// 函数的参数
// url: 请求的地址
// type: 请求的方式 get /post
// data: 要上传的数据 要求是键值对的形式
// 函数的返回值 没有返回值 // 增加的功能:
// 1. 如果没有传请求的地址,就没有必要执行后面的代码
// 2. 默认是get, 如果传post,则发post请求
// 3. 不需要再上传键值对的字符串了name=zs&age=18&sex=m
// 而是上传一个对象
// {
// name: 'zs',
// age: 18,
// sex: 'm'
// }
// 优化前: 参数列表的问题: 如果记不住顺序,那么传参会错误.少些参数,也会错误
// 优化后: 传入一个对对象. 不需要考虑顺序. 少写type,函数照样可以正常运行
// option要求是一个对象
// option.url
// option.type
// option.data // 最后一个功能: ajax({
url: '../test.php',
type: 'post',
data: {
name: 'zs'
},
success: function(res) {
//当数据成功的响应回来,那么这个函数会自动被调用
// 而且,希望将获取到的数据,传入到这个回调函数中
// alert('响应成功了');
console.log(res);
// JSON.parse(res)
}
});
function ajax(option) {
//判断是否传入对象,
if (option.constructor !== Object) {
console.log('对象');
return;
} //获取参数
var url = option.url;
var type = option.type;
var data = option.data; //功能 1 没有传url return
if (!url) {
return;
}
//功能 2 请求类型
type = type === 'post' ? 'post' : 'get';
//功能 3 将 data 从对象转成 用 & 隔开的键值对的 字符串
var arr = [];
for (var k in data) {
arr.push(k + '=' + data[k]);
}
data = arr.join('&'); //1.创建对象
var xhr = new XMLHttpRequest();
//2.设置请求行
if (type === 'get') {
url += '?' + arr;
data = null;
}
xhr.open(type, url);
//3.设置请求头
if (type === 'post') {
xhr.setRequestHeader(
'content-type',
'application/x-www-form-urlencoded'
);
}
//4.设置请求主体并发送请求
xhr.send(data);
//5.接收响应
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
var result = xhr.responseText;
if (xhr.getResponseHeader('content-type').indexOf('json') != -1) {
var obj = JSON.parse(result);
option.success & option.success(obj);
} else if (
xhr.getResponseHeader('content-type').indexOf(xml) != -1
) {
option.success && option.success(xhr.responseXML);
} else {
option.success && option.success(result);
}
} else {
//失败
option.error && option.error();
}
};
}
</script>
04.封装ajax的更多相关文章
- 使用原生JS封装Ajax
使用原生 的JS封装 Ajax,实现 仿JQuery的Ajax,post,get三种异步请求方式: var MAjax = { //根据浏览器创建异步对象 createXhr: function () ...
- 封装Ajax框架!(前言篇)
Ajax技术就是利用javascript和xml实现异步交互的功能. 首先先来介绍一下Ajax相关知识点,如果这些你都会的话,请直接跳转到封装ajax框架!(代码篇) 一.Ajax对象的创建 1.创建 ...
- 原生javascript封装ajax和jsonp
在我们请求数据时,完成页面跨域,利用原生JS封装的ajax和jsonp: <!DOCTYPE html> <html lang="en"> <head ...
- AJAX编程-封装ajax工具函数
即 Asynchronous [e'sɪŋkrənəs] Javascript And XML,AJAX 不是一门的新的语言,而是对现有技术的综合利用.本质是在HTTP协议的基础上以异步的方式与服务器 ...
- javascript 【封装AJAX】
post function createXHR() { if (typeof XMLHttpRequest != 'undefined') { return new XMLHttpRequest(); ...
- 封装ajax原理
封装ajax原理 首先处理 用户如果不传某些参数,设置默认值 type默认get 默认url为当前页 默认async方式请求 data数据默认为{} 处理用户传进来的参数对象 遍历,拼接成key=va ...
- 自定义封装ajax,复制即可用
支持get.post请求 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...
- 封装ajax,让调用变得简单优化
思考一下: 通常我们在使用ajax来发送接口请求时,每一次都会调用ajax固定的元素,比如data.url.method.success.error等.那么我们想一下能不能先把ajax封装起来,在每次 ...
- 原生JS封装ajax方法
http://blog.sucaijiayuan.com/article/89 jquery框架的ajax方法固然好用,但是假如某天我们的项目不能引入jquery或项目需求很简单,没有很多交互功能,只 ...
随机推荐
- L2-007 家庭房产 (25 分) (并查集)
链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805068539215872 题目: 给定每个人的家庭成员和其自己名 ...
- 【C++11】unoedered_map和map(部分转载)
1.结论 新版的hash_map都是unordered_map了,这里只说unordered_map和map. 运行效率:unordered_map最高,而map效率较低但提供了稳定效率和有序的序列. ...
- vue 双向数据绑定的实现学习(二)- 监听器的实现
废话:上一篇https://www.cnblogs.com/adouwt/p/9928278.html 提到了vue实现的基本实现原理:Object.defineProperty() -数据劫持 和 ...
- SpingBoot+Mybaits+Vue,更新学习
1.DTO 2.实体类 3.Controller层,UpdatePrize/{id}为接口 4.Service层 5.Impl实现层 之后就可以更新数据了. 6.Vue链接接口 7.请求,解析,返回值 ...
- Redis从入门到精通【centos下的安装】
上传redis 到服务器 解压并重命名 然后yum -y install gcc-c++ zlib zlib-devel pcre pcre-devel openssl openssl-devel 然 ...
- 【转载 | 笔记】IIS无法删除应该程序池 因为它包含X个应用程序
IIS无法删除应该程序池 因为它包含X个应用程序 今天代码主分支在vs2015创建了虚拟目录http://localhost/webapp指向的物理路径是E:\webapp 之后新开了一个分支把代码放 ...
- loadrunner中的web_convert_param函数
某些场景中获取的参数.自定义参数直接作用于请求的body或url时将不会被特殊的转换为页面编码一致的字符串,导致提交至服务的拼接字符串格式不正确,我们就可以将字符串转为url或html中的格式. 注: ...
- 烽火2640路由器命令行手册-13-VPDN(L2TP,PPTP,PPPOE)配置命令
VPDN(L2TP,PPTP,PPPOE)配置命令 目 录 第1章 VPDN配置命令... 1 1.1 VPDN配置命令... 1 1.1.1 accept-dialin. 1 1.1.2 doma ...
- [原创]全新IFPGA-Cable----支持Xilinx/Altera/Lattice JTAG和UART
Xilinx 平台:ISE 14.7/Vivado 2014.4+: Lattice 平台:Diamond软件自动识别,免驱动: Altera 平台:安装相关插件,支持: 串 ...
- ceph hammer 0.94.10手动部署方法Ceph Hammer版(0.94.10)手动部署for CentOS 7.x
Ceph Hammer版(0.94.10)手动部署for CentOS 7.x --lin.wang 20190310 环境有三个节点node-1,node-2,node-3,每个节点三个ssd盘作为 ...