原生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 相关文章推荐
去除链接虚线全面分析总结
Aug 15 Javascript
jQuery 隔行换色 支持键盘上下键,按Enter选定值
Aug 02 Javascript
键盘上一张下一张兼容IE/google/firefox等浏览器
Jan 28 Javascript
JS实现向表格中动态添加行的方法
Mar 30 Javascript
JavaScript 匿名函数和闭包介绍
Apr 13 Javascript
Jquery 自定义事件实现发布/订阅的简单实例
Jun 12 Javascript
javascript简单实现跟随滚动条漂浮的返回顶部按钮效果
Aug 19 Javascript
js选项卡的制作方法
Jan 23 Javascript
jQuery基于ajax实现页面加载后检查用户登录状态的方法
Feb 10 Javascript
使用Electron构建React+Webpack桌面应用的方法
Dec 15 Javascript
详解javascript中var与ES6规范中let、const区别与用法
Jan 11 Javascript
Vue实现手机扫描二维码预览页面效果
May 28 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
mysql_num_rows VS COUNT 效率问题分析
2011/04/23 PHP
php解压文件代码实现php在线解压
2014/02/13 PHP
PHP使用mysql与mysqli连接Mysql数据库用法示例
2016/07/07 PHP
PHP实现腾讯短网址生成api接口实例
2020/12/08 PHP
javascript英文日期(有时间)选择器
2007/05/02 Javascript
jquery 最简单易用的表单验证插件
2010/02/27 Javascript
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
2010/12/30 Javascript
JavaScript中:表达式和语句的区别[译]
2012/09/17 Javascript
JavaScript实现数组随机排序的方法
2015/06/26 Javascript
jQuery旋转木马式幻灯片轮播特效
2015/12/04 Javascript
利用策略模式与装饰模式扩展JavaScript表单验证功能
2017/02/14 Javascript
ES6新特性之函数的扩展实例详解
2017/04/01 Javascript
jQuery用户头像裁剪插件cropbox.js使用详解
2017/06/07 jQuery
JavaScript创建对象方法实例小结
2018/09/03 Javascript
基于vue、react实现倒计时效果
2019/08/26 Javascript
layui表格数据复选框回显设置方法
2019/09/13 Javascript
关于layui时间回显问题的解决方法
2019/09/24 Javascript
JS实现打字游戏
2019/12/17 Javascript
Antd表格滚动 宽度自适应 不换行的实例
2020/10/27 Javascript
[05:31]DOTA2上海特级锦标赛主赛事第三日RECAP
2016/03/05 DOTA
python处理Excel xlrd的简单使用
2017/09/12 Python
pyqt5的QComboBox 使用模板的具体方法
2018/09/06 Python
对numpy中的where方法嵌套使用详解
2018/10/31 Python
Django 日志配置按日期滚动的方法
2019/01/31 Python
Selenium启动Chrome时配置选项详解
2020/03/18 Python
python多线程实现同时执行两个while循环的操作
2020/05/02 Python
python3通过qq邮箱发送邮件以及附件
2020/05/20 Python
CSS3盒子模型详解
2013/04/24 HTML / CSS
西安启天科技有限公司网络工程师面试题笔试题
2016/06/12 面试题
软件生产职位结构化面试主要考察要素及面试题库
2015/06/12 面试题
最美护士演讲稿
2014/08/27 职场文书
致百米运动员广播稿5篇
2014/10/13 职场文书
2016自主招生教师推荐信范文
2015/03/23 职场文书
MySQL 重写查询语句的三种策略
2021/05/10 MySQL
python spilt()分隔字符串的实现示例
2021/05/21 Python
能让Python提速超40倍的神器Cython详解
2021/06/24 Python