原生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布局,所以没有使 ...
随机推荐
- 弹弹弹 打造万能弹性layout
demo地址:https://github.com/cmlbeliever/BounceLayout 最近任务比较少,闲来时间就来研究了android事件传播机制.根据总结分析的结果,打造出万能弹性l ...
- Redis数据类型简介(十分钟快速学习Redis)
如何在ubuntu18.04上安装和保护redis 如何连接到Redis数据库 如何管理Redis数据库和Keys 如何在Redis中管理副本和客户端 如何在Redis中管理字符串 如何在Redis中 ...
- 洛谷P1027题解
https://www.luogu.org/problem/P1027传送到题目 首先,让我骂一句那没事找事的Car还取一个那么奇怪的名字看到这个题,恕我直言,我们明显可以看出这是一道图的最短路问题. ...
- JMeter基于HTML测试报告的生成
1第一步: 下载ant,搭建ant环境(path的环境变量) 在path中添加ANT_HOME\bin 验证是否搭建成功Lcmd中输入ant 提示这个说明搭建成功. 第二步: 1.jmerer的目录C ...
- 「雕爷学编程」Arduino动手做(32)——雨滴传感器模块
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里 ...
- 10.2 Go redis
10.2 Go redis redis是NoSQL数据, 不是传统的关系型数据库.linux,windows环境皆可安装. https://redis.io http://www.redis.cn r ...
- VIOS挂载ISO文件
6.VIOS挂载ISO文件 1.给vhost建立虚拟设备 mkvdev -vadapter vhostX -fbo -dev cdx 2.建立存放ISO的资料库 mkrep -sp rootvg -s ...
- XXX_ProductCRUD的项目结构与配置文件
MVC_ProductCRUD Hibernate_ProductCRUD 项目结构 ...
- Closures Basic
Closures Closures are one of the most powerful features of JavaScript. JavaScript allows for the nes ...
- Java——java.lang.NullPointerException
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); StandardJavaFileManager fileManager = ...