原生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 相关文章推荐
两个Javascript小tip资料
Nov 23 Javascript
js有关元素内容操作小结
Dec 20 Javascript
Javascript和HTML5利用canvas构建Web五子棋游戏实现算法
Jul 17 Javascript
js判断浏览器类型的方法
Aug 07 Javascript
jquery提取元素里的纯文本不包含span等里的内容
Sep 30 Javascript
Jquery获取元素的父容器对象示例代码
Feb 10 Javascript
轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)
Nov 30 Javascript
使用webpack3.0配置webpack-dev-server教程
May 29 Javascript
浅谈layui 数据表格前后台传值的问题
Sep 12 Javascript
vue输入节流,避免实时请求接口的实例代码
Oct 30 Javascript
Vue +WebSocket + WaveSurferJS 实现H5聊天对话交互的实例
Nov 18 Vue.js
js动态添加带圆圈序号列表的实例代码
Feb 18 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/12/31 PHP
php生成RSS订阅的方法
2015/02/13 PHP
实例讲解php数据访问
2016/05/09 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
js 浏览本地文件夹系统示例代码
2013/10/24 Javascript
js实现网页标题栏闪烁提示效果实例分析
2014/11/20 Javascript
JavaScript中数据结构与算法(三):链表
2015/06/19 Javascript
javascript封装addLoadEvent实现页面同时加载执行多个函数的方法
2016/07/25 Javascript
javascript与jquery动态创建html元素示例
2016/07/25 Javascript
谈谈JavaScript数组常用方法总结
2017/01/24 Javascript
jquery实现自定义图片裁剪功能【推荐】
2017/03/08 Javascript
angular.js指令中transclude选项及ng-transclude指令详解
2017/05/24 Javascript
Vue.Draggable实现拖拽效果
2020/07/29 Javascript
JavaScript实现设置默认日期范围为最近40天的方法分析
2017/07/12 Javascript
VueJS 集成 Medium Editor的示例代码 (自定义编辑器按钮)
2017/08/24 Javascript
Vue实例中生命周期created和mounted的区别详解
2017/08/25 Javascript
JavaScript使用FileReader实现图片上传预览效果
2020/03/27 Javascript
JavaScript for循环 if判断语句(学习笔记)
2017/10/11 Javascript
js实现简单进度条效果
2020/03/25 Javascript
解决vue项目中出现Invalid Host header的问题
2020/11/17 Javascript
使用python画个小猪佩奇的示例代码
2018/06/06 Python
DES加密解密算法之python实现版(图文并茂)
2018/12/06 Python
Python实现动态循环输出文字功能
2020/05/07 Python
python redis存入字典序列化存储教程
2020/07/16 Python
python实现磁盘日志清理的示例
2020/11/05 Python
网友共享的几个面试题关于Java和Unix等方面的
2016/09/08 面试题
大学生饮食配送创业计划书
2014/01/04 职场文书
电气自动化专业职业规划范文
2014/02/16 职场文书
合伙经营协议书
2014/04/18 职场文书
倡议书作文
2015/01/19 职场文书
教师工作决心书
2015/02/04 职场文书
2015年教师自我评价范文
2015/03/04 职场文书
白银帝国观后感
2015/06/17 职场文书
2019年浪漫婚礼证婚词
2019/06/27 职场文书
如何使用JavaScript策略模式校验表单
2021/04/29 Javascript
python装饰器代码解析
2022/03/23 Python