原生JS写Ajax的请求函数功能


Posted in Javascript onDecember 22, 2017

一般我们写网页的时候,如果用到 Ajax 请求服务器,都是使用 JQuery 等已经封装好的库来调用,比较简单。

但是一般这些库的功能很多,引入了太多我们用不到的东西,如果我们需要写一个功能单一,简单的页面,完全用不到引用如此庞大的库文件。

我们可以简单实现一个自己的 Ajax 请求功能,具体的代码如下:

var ajax = {};
ajax.x = function () {
 if (typeof XMLHttpRequest !== 'undefined') {
 return new XMLHttpRequest();
 }
 var versions = [
 "MSXML2.XmlHttp.6.0",
 "MSXML2.XmlHttp.5.0",
 "MSXML2.XmlHttp.4.0",
 "MSXML2.XmlHttp.3.0",
 "MSXML2.XmlHttp.2.0",
 "Microsoft.XmlHttp"
 ];
 var xhr;
 for (var i = 0; i < versions.length; i++) {
 try {
 xhr = new ActiveXObject(versions[i]);
 break;
 } catch (e) {
 }
 }
 return xhr;
};
ajax.send = function (url, method, data, success,fail,async) {
 if (async === undefined) {
 async = true;
 }
 var x = ajax.x();
 x.open(method, url, async);
 x.onreadystatechange = function () {
 if (x.readyState == 4) {
 var status = x.status;
 if (status >= 200 && status < 300) {
 success && success(x.responseText,x.responseXML)
 } else {
 fail && fail(status);
 }
 }
 };
 if (method == 'POST') {
 x.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
 }
 x.send(data)
};
ajax.get = function (url, data, callback, fail, async) {
 var query = [];
 for (var key in data) {
 query.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key]));
 }
 ajax.send(url + (query.length ? '?' + query.join('&') : ''), 'GET', null, callback, fail, async)
};
ajax.post = function (url, data, callback, fail, async) {
 var query = [];
 for (var key in data) {
 query.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key]));
 }
 ajax.send(url,'POST', query.join('&'), callback, fail, async)
};

使用方法: GET

ajax.get('/test.php', {foo: 'bar'}, function(response,xml) {
 //success
},
function(status){
 //fail
});
POST
ajax.post('/test.php', {foo: 'bar'}, function(response,xml) {
 //succcess
},function(status){
 //fail
});

这里需要注意一个问题,如果我们想要发送类似

var sendCmd = "?op_code=" + code + "&op_cmd=" + cmd;
ajax.post('/control' + sendCmd,'',function(response,xml) {
 console.log('success');
},
function(status){
 console.log('failed:' + status);
});

总结

以上所述是小编给大家介绍的原生JS写Ajax的请求函数功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木的支持!

Javascript 相关文章推荐
索趣科技的答案
Feb 07 Javascript
javascript:void(0)使用探讨
Aug 27 Javascript
jquery隐藏标签和显示标签的实例
Nov 11 Javascript
jQuery遍历DOM节点操作之filter()方法详解
Apr 14 Javascript
js style.display=block显示布局错乱问题的解决方法
Sep 21 Javascript
js实现移动端编辑添加地址【模仿京东】
Apr 28 Javascript
JS 组件系列之Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
Jun 30 Javascript
浅谈Vue.js 1.x 和 2.x 实例的生命周期
Jul 25 Javascript
JS数组操作之增删改查的简单实现
Aug 21 Javascript
Django使用多数据库的方法
Sep 06 Javascript
layui 数据表格+分页+搜索+checkbox+缓存选中项数据的方法
Sep 21 Javascript
JS+CSS+HTML实现“代码雨”类似黑客帝国文字下落效果
Mar 17 Javascript
原生JS控制多个滚动条同步跟随滚动效果
Dec 22 #Javascript
使用vue-cli+webpack搭建vue开发环境的方法
Dec 22 #Javascript
通过vue-cli来学习修改Webpack多环境配置和发布问题
Dec 22 #Javascript
vue 系列——vue2-webpack2框架搭建踩坑之路
Dec 22 #Javascript
Webpack框架核心概念(知识点整理)
Dec 22 #Javascript
详解webpack+express多页站点开发
Dec 22 #Javascript
如何开发出更好的JavaScript模块
Dec 22 #Javascript
You might like
使用字符串函数输出整数化的PHP版本号
2006/10/09 PHP
PHP安全配置详细说明
2011/09/26 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
2019/04/04 PHP
PHP中isset、empty的用法与区别示例详解
2020/11/05 PHP
js资料prototype 属性
2007/03/13 Javascript
js获取TreeView控件选中节点的Text和Value值的方法
2012/11/24 Javascript
javascript 全选与全取消功能的实现代码
2012/12/23 Javascript
jquery Tab效果和动态加载的简单实例
2013/12/11 Javascript
用jQuery模拟select下拉框的简单示例代码
2014/01/26 Javascript
jquery实现动态操作select选中
2015/02/11 Javascript
javascript中的Base64、UTF8编码与解码详解
2015/03/18 Javascript
JS实现的鼠标跟随代码(卡通手型点击效果)
2015/10/26 Javascript
jQuery实现多级联动下拉列表查询框
2016/01/18 Javascript
JS遍历数组及打印数组实例分析
2016/01/21 Javascript
深入理解jQuery之事件移除
2016/06/02 Javascript
JavaScript轻松创建级联函数的方法示例
2017/02/10 Javascript
nodejs+express搭建多人聊天室步骤
2018/02/12 NodeJs
js正则相关知识点专题
2018/05/10 Javascript
JS引用传递与值传递的区别与用法分析
2018/06/01 Javascript
一次Webpack配置文件的分离实战记录
2018/11/30 Javascript
layui上传图片到服务器的非项目目录下的方法
2019/09/26 Javascript
vue+canvas实现移动端手写签名
2020/05/21 Javascript
python构造icmp echo请求和实现网络探测器功能代码分享
2014/01/10 Python
Django中使用locals()函数的技巧
2015/07/16 Python
pycharm创建一个python包方法图解
2019/04/10 Python
python 画图 图例自由定义方式
2020/04/17 Python
python3 循环读取excel文件并写入json操作
2020/07/14 Python
手把手教你从PyCharm安装到激活(最新激活码),亲测有效可激活至2089年
2020/11/25 Python
python 批量下载bilibili视频的gui程序
2020/11/20 Python
基于Django集成CAS实现流程详解
2020/11/28 Python
StubHub哥伦比亚:购买和出售您的门票
2016/10/20 全球购物
英国标准协会商店:BSI Shop
2019/02/25 全球购物
电厂厂长岗位职责
2014/01/02 职场文书
农业局学习党的群众路线教育实践活动心得体会
2014/03/07 职场文书
2014年检验员工作总结
2014/11/19 职场文书
2014年艾滋病防治工作总结
2014/12/10 职场文书