原生js ajax 封装
首先我们先了解ajax的get和post请求分别是怎样请求数据的
get请求
let ajx = new XMLHttpRequest() //创建ajax实例
/*打开需要请求的地址,可以有三个参数
参1:请求方式
参2:请求地址
参3:是否异步,可选,默认异步
*/
ajx.open('get','http://localhost/day02/api/gouwu.php?name=zhangsan')
ajx.send()//向后端发送的数据,get方式用不到
ajx.onreadystatechange = ()=>{//监听状态
if(ajx.readyState==4){//判断就绪码,4为成功
if(ajx.status==200){//判断状态码,200表示成功
console.log(ajx.responseText) //打印请求的内容
}
}
}
post请求
let ajx = new XMLHttpRequest() //创建ajax实例
// /*打开需要请求的地址,可以有三个参数
// 参1:请求方式
// 参2:请求地址
// 参3:是否异步,可选,默认异步
// */
ajx.open('post','http://localhost/day02/api/gouwu.php')
ajx.setRequestHeader('content-type','application/x-www-form-urlencoded')//设置请求头
ajx.send('name=zhangsan')//向后端发送的数据,get方式用不到
ajx.onreadystatechange = ()=>{//监听状态
if(ajx.readyState==4){//判断就绪码,4为成功
if(ajx.status==200){//判断状态码,200表示成功
console.log(ajx.responseText) //打印请求的内容
}
}
}
很麻烦吧,请求个数据我们需要写这么多,那么我们把它封装成get、post请求都可以使用的方法
首先先想好我们需要调用的方式,这里我封装的调用方式是这样的
ajax({ //调用封装的方法
type: 'get', //可以不写,默认get
url: 'http://localhost/day02/api/gouwu.php', //请求地址
data: { //需要传输的数据,可选
name: 'zhangsan',
age: 18
}
},a=>{//处理的到的数据
console.log(a)
})
然后根据上面的调用方法进行封装
function ajax(obj, fn) {
let ajx = new XMLHttpRequest() //创建ajax实例
obj.type = obj.type ? obj.type : 'get' //判断type存不存在,不存在默认等于get
let data = null //向后端发送的数据
if (obj.data) { //判断是否存在
for (let i in obj.data) {
data += i + '=' + obj.data[i] + '&' //键值拼接成name=zhagnsan&age=18形式
}
}
if (obj.type == 'get') { //处理get请求发送数据
ajx.open(obj.type, obj.url + '?' + data) //地址上拼接数据
ajx.send()
} else if (obj.type == 'post') { //处理post请求发送数据
ajx.open(obj.type, obj.url)
ajx.setRequestHeader('content-type', 'application/x-www-form-urlencoded') //设置请求头
ajx.send(data) //发送数据
}
ajx.onreadystatechange = () => {
if (ajx.readyState == 4) {
if (ajx.status == 200) {
/*
将得到的数据传给回调函数
短路写法,如果不传fn为空不会执行,有值就执行
*/
fn&&fn(ajx.responseText)
}
}
}
}
这样我们就封装好了,以后使用也就变得方便了
原生js ajax 封装的更多相关文章
- 原生js ajax与jquery ajax的区别
原生js ajax的调用: ajax({ type : "get", url : "02_ajax_get.txt", data : { "userN ...
- 2、.net NVelocity中原生javascript ajax封装使用
在页面上,我们经常会遇到局部刷新的例子,这个时候,就需要用到ajax, 因为很多代码都是公用的,所以我们想到了,将代码封装,简化了使用,减少了冗余 javascript ajax代码如下: var x ...
- 新浪博客:html+css+原生JS+Ajax初级+mySql数据库——源码
**************************************************************************************************** ...
- 原生 JS Ajax,GET和POST 请求实例代码
javascript/js的ajax的GET请求代码如下所示: <script type="text/javascript"> /* 创建 XMLHttpRequest ...
- 原生js ajax请求
什么是ajax AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新. 这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新, ...
- 原生JS Ajax 请求
var username = document.getElementById('username').value; var password = document.getElementById('pa ...
- 原生js封装ajax:传json,str,excel文件上传表单提交
由于项目中需要在提交ajax前设置header信息,jquery的ajax实现不了,我们自己封装几个常用的ajax方法. jQuery的ajax普通封装 var ajaxFn = function(u ...
- 用原生JS实现AJAX和JSONP
前端开发在需要与后端进行数据交互时,为了方便快捷,都会选择JQuery中封装的AJAX方法,但是有些时候,我们只需要JQuery的AJAX请求方法,而其他的功能用到的很少,这显然是没必要的.其实,原生 ...
- 原生js写一个无缝轮播图插件(支持vue)
轮播图插件(Broadcast.js) 前言:写这个插件的原因 前段时间准备用vue加上网易云的nodejs接口,模拟网易云音乐移动端.因为想自己写一遍所有的代码以及加固自己的flex布局,所以没有使 ...
随机推荐
- java ->IO流_字符流
字符流 经过前面的学习,我们基本掌握的文件的读写操作,在操作过程中字节流可以操作所有数据,可是当我们操作的文件中有中文字符,并且需要对中文字符做出处理时怎么办呢? 字节流读取字符的问题 通过以下程序读 ...
- 修改jupyter默认保存文件的目录
1.打开 Anaconda Prompt输入命令 jupyter notebook --generate-config 2.可以看到生成了目录及jupyter notebook的配置文件,打开该文件. ...
- Shell脚本定时监控
1.建立脚本文件 autostart.sh #!/bin/bashexport JAVA_HOME=/home/java/jdk1.8.0_191export JRE_HOME=$JAVA_HOME/ ...
- 有一分数序列:2/1, 3/2, 5/3, 8/5, 13/8, 21/13....求出这个数列的第M到N项之和(M>2,N>2,N>M)
package bianchengti; /* * 有一分数序列:2/1, 3/2, 5/3, 8/5, 13/8, 21/13.... * 求出这个数列的第M到N项之和(M>2,N>2, ...
- python之pytest框架实现
一.pytest测试框架简介: pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个特点: 简单灵活,容易上手 支持参数化 能够支持简单的单元测试和复杂的功能测试,还可以用来做se ...
- React Native 架构演进
写在前面 上一篇(React Native 架构一览)从设计.线程模型等方面介绍了 React Native 的现有架构,本篇将分析这种架构的局限性,以及 React Native 正在进行的架构升级 ...
- uefi win10 Ubuntu 18的安装
uefi win10 Ubuntu 18的安装 (Ubuntu折腾的第一天) 安装时的踩坑记录
- 苏浪浪 201771010120 《面向对象程序设计(java)》第9周学习总结
实验九异常.断言与日志 实验时间 2018-10-25 1.实验目的与要求 (1) 掌握java异常处理技术: (2) 了解断言的用法: (3) 了解日志的用途: (4) 掌握程序基础调试技巧: 2. ...
- Vue基础:子组件抽取与父子组件通信
在工作中承担一部分前端工作,主要使用Vue + Element UI. 随着版本迭代,需求增加,页面往往变得更加臃肿,不易维护.学习子组件的封装和抽取,能更好适应需求. 为什么需要子组件 可复用 将重 ...
- SpringBoot2.x快速入门指南(一)
SpringBoot2.x快速入门指南(一) 准备工作 IDE: IntelliJ IDEA 2020.3 Java环境 jdk1.8 在官网快速创建SpringBoot项目 下面开始进入正题: 进入 ...