自己在写一些小项目时,总是经常会使用AJAX请求,每次用原生的很蛋疼,又不想引入JQ库,于是这里我根据JQuery的函数的传参和效果,利用原生JS仿写一套简单AJXA插件。
原生JS发送AJAX请求
简介
AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。
AJAX可以允许网页异步与服务器进行数据交换,是一个使用频率很高的技术,所以我们需要将他封装成一个简单的方法,方便调用。
而且现在主流的浏览器都支持:

使用
建立AJAX对象
使用AJAX需要先建立一个AJAX请求对象:XMLHttpRequest
(现在浏览器主要都是内建的这个对象,IE5,6为ActiveXObject,基本已被淘汰,不考虑这个)
1 |
|
设置响应事件
使用AJAX的时候我们可能需要监听一些事件,比如AJAX请求完成等。
我们使用设置onreadystatechange这个方法来实现,这个方法会在AJAX的状态变化时发生改变。它的状态是XMLHttpRequest对象的 readyState 属性保存的。
数值对应的状态
0: 请求未初始化
1: 服务器连接已建立
2: 请求已接收
3: 请求处理中
4: 请求已完成,且响应已就绪
例如设置以下代码便可以监听AJAX完成事件
1 |
|
设置请求信息
在XMLHttpRequest中我们可以使用 open 方法来设置主要信息
1 | req.open(reqMethod,reqURL,reqAsync); |
同时我们也可以使用XMLHttpRequest中得 setRequestHeader 方法来设置头信息
1 | req.setRequestHeader(header,value); |
发生请求和数据
当所有必要的信息设置完以后我们可以使用 send 方法来发送请求
1 | req.send(reqData); |
获取服务器返回的状态和数据
AJAX一般是用来获取后台的数据,然后反馈给用户,所以我们需要获取数据。
在AJAX执行完了后,数据和状态直接存放在XMLHttpRequest对象的 status 和 responseText 里。
status:服务器返回的状态,一般成功为200 失败为404
responseText:为返回的数据,如果为JSON,依然需要转化为JS对象
封装的的插件
ajax(obj)
这个是基础方法,后面会基于这个方法扩展多个方法。
1 | /* |
get(url,data,success,error)
基于ajax方法的扩展
1 | function get(url,data,success,error){ |
getJSON(url,data,success,error)
基于get方法的扩展,转化json格式
1 | function getJSON(url,data,success,error){ |
post(url,data,success,error)
基于ajax方法的扩展
1 | function post(url,data,success,error){ |
版本
还在修改中,在学习和开发过程中遇到问题会及时修正和更新~~
2017-07-18 修复无法捕捉网络错误的问题,将100和200系列响应认为默认为正确
2017-02-08 修复GET函数多个?的缺陷,增加请求进度的控制
2017-01-13 修复BUG,post请求请求名错误
2016-12-22 修复BUG,异步为false时依然为true
2016-12-19 修复BUG,异步为true时依然为false
2016-11-21 修改、添加post
2016-09-27 添加用户名和密码,添加开始reqBefore前设置XMLHttpRequest对象 添加get方法
2016-09-16 建立