原生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 相关文章推荐
解读IE和firefox下JScript和HREF的执行顺序
Jan 12 Javascript
使用javascript获取flash加载的百分比的实现代码
May 25 Javascript
jQuery使用动态渲染表单功能完成ajax文件下载
Jan 15 Javascript
jquery中prop()方法和attr()方法的区别浅析
Sep 06 Javascript
javascript中全局对象的parseInt()方法使用介绍
Dec 19 Javascript
JS中getYear()和getFullYear()区别分析
Jul 04 Javascript
jfreechart插件将数据展示成饼状图、柱状图和折线图
Apr 13 Javascript
简介BootStrap model弹出框的使用
Apr 27 Javascript
基于JavaScript中字符串的match与replace方法(详解)
Dec 04 Javascript
jQuery UI实现动画效果代码分享
Aug 19 jQuery
vue+layui实现select动态加载后台数据的例子
Sep 20 Javascript
JS常用正则表达式超全集(密码强度校验,金额校验,IE版本,IPv4,IPv6校验)
Feb 03 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的引用计数机制
2013/06/14 PHP
PHP curl CURLOPT_RETURNTRANSFER参数的作用使用实例
2015/02/07 PHP
使用Jquery打造最佳用户体验的登录页面的实现代码
2011/07/08 Javascript
深入理解JavaScript系列(16) 闭包(Closures)
2012/04/12 Javascript
javascript放大镜效果的简单实现
2013/12/09 Javascript
禁用JavaScript控制台调试的方法
2014/03/07 Javascript
利用CSS3在Angular中实现动画
2016/01/15 Javascript
Javascript中Date类型和Math类型详解
2016/02/27 Javascript
AngularJS中run方法的巧妙运用
2017/01/04 Javascript
你不知道的 javascript【推荐】
2017/01/08 Javascript
js自制图片放大镜功能
2017/01/24 Javascript
JavaScript实现类似淘宝的购物车效果
2017/03/16 Javascript
Vue学习笔记进阶篇之过渡状态详解
2017/07/14 Javascript
关于vue.js发布后路径引用的问题解决
2017/08/15 Javascript
JScript实现地址选择功能
2017/08/15 Javascript
详解Vue2 SSR 缓存 Api 数据
2017/11/20 Javascript
JavaScript实现京东放大镜效果
2019/12/03 Javascript
javascript设计模式 ? 备忘录模式原理与用法实例分析
2020/04/21 Javascript
python 简易计算器程序,代码就几行
2009/08/29 Python
python中pandas.DataFrame排除特定行方法示例
2017/03/12 Python
python 遍历目录(包括子目录)下所有文件的实例
2018/07/11 Python
Python操作json的方法实例分析
2018/12/06 Python
python实现大文件分割与合并
2019/07/22 Python
python3 实现的对象与json相互转换操作示例
2019/08/17 Python
Django继承自带user表并重写的例子
2019/11/18 Python
妙用itchat! python实现久坐提醒功能
2019/11/25 Python
python interpolate插值实例
2020/07/06 Python
Python实现手势识别
2020/10/21 Python
世界最大的海报和艺术印刷商店:AllPosters.com
2017/02/01 全球购物
AMAVII眼镜官网:时尚和设计师太阳镜
2019/05/05 全球购物
环境工程专业个人求职信
2013/12/05 职场文书
领导班子对照检查剖析材料
2014/10/13 职场文书
2014年平安创建工作总结
2014/11/24 职场文书
2014年教研工作总结
2014/12/06 职场文书
反腐倡廉学习心得体会范文
2015/08/15 职场文书
Python max函数中key的用法及原理解析
2021/06/26 Python