原生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 相关文章推荐
10款新鲜出炉的 jQuery 插件(Ajax 插件,有幻灯片、图片画廊、菜单等)
Jun 08 Javascript
jquery 实现密码框的显示与隐藏示例代码
Sep 18 Javascript
JavaScript中使用typeof运算符需要注意的几个坑
Nov 08 Javascript
jQuery中index()方法用法实例
Dec 27 Javascript
jQuery实现别踩白块儿网页版小游戏
Jan 18 Javascript
Vue.js中用webpack合并打包多个组件并实现按需加载
Feb 17 Javascript
详解webpack自动生成html页面
Jun 29 Javascript
js实现日期显示的一些操作(实例讲解)
Jul 27 Javascript
vue 里面使用axios 和封装的示例代码
Sep 01 Javascript
用node-webkit把web应用打包成桌面应用(windows环境)
Feb 01 Javascript
使用pkg打包Node.js应用的方法步骤
Oct 19 Javascript
200行HTML+JavaScript实现年会抽奖程序
Jan 22 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
中国广播史趣谈 — 几个历史第一次
2021/03/01 无线电
分享一个Laravel好用的Cache宏
2015/03/02 PHP
详解PHP中的PDO类
2015/07/06 PHP
php封装的mysqli类完整实例
2016/10/18 PHP
JavaScript CSS修改学习第一章 查找位置
2010/02/19 Javascript
js模拟hashtable的简单实例
2014/03/06 Javascript
javascript鼠标滑动评分控件完整实例
2015/05/13 Javascript
JavaScript DOM 学习总结(五)
2015/11/24 Javascript
Centos7 中 Node.js安装简单方法
2016/11/02 Javascript
JS识别浏览器类型(电脑浏览器和手机浏览器)
2016/11/18 Javascript
Vue2 使用 Echarts 创建图表实例代码
2017/05/18 Javascript
使用Dropzone.js上传的示例代码
2017/10/10 Javascript
JS实现音乐导航特效
2020/01/06 Javascript
[03:42]2014DOTA2西雅图国际邀请赛 Navi战队巡礼
2014/07/07 DOTA
[01:33:59]真人秀《加油 DOTA》 第六期
2014/09/09 DOTA
[34:10]Secret vs VG 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.24
2019/09/10 DOTA
在NumPy中创建空数组/矩阵的方法
2018/06/15 Python
python2.7和NLTK安装详细教程
2018/09/19 Python
浅谈django三种缓存模式的使用及注意点
2018/09/30 Python
Python中的全局变量如何理解
2020/06/04 Python
Anaconda的安装与虚拟环境建立
2020/11/18 Python
Python中对象的比较操作==和is区别详析
2021/02/12 Python
localstorage和sessionstorage使用记录(推荐)
2017/05/23 HTML / CSS
HTML5调用手机发短信和打电话功能
2020/04/29 HTML / CSS
女装和独特珠宝:Sundance Catalog
2018/09/19 全球购物
命名空间(namespace)和程序集(Assembly)有什么区别
2015/09/25 面试题
会计电算化专业毕业生推荐信
2013/12/24 职场文书
心理健康心得体会
2014/01/02 职场文书
社区中秋节活动方案
2014/01/29 职场文书
交通事故检查书范文
2014/01/30 职场文书
安全生产先进个人材料
2014/02/06 职场文书
《记承天寺夜游》教学反思
2014/02/16 职场文书
工地安全质量标语
2014/06/07 职场文书
拯救大兵瑞恩观后感
2015/06/09 职场文书
Python爬虫基础讲解之请求
2021/05/13 Python
分享提高 Python 代码的可读性的技巧
2022/03/03 Python