原生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 相关文章推荐
使用js操作css实现js改变背景图片示例
Mar 10 Javascript
IE6 hack for js 集锦
Sep 23 Javascript
freemarker判断对象是否为空的方法
Aug 13 Javascript
简单的js计算器实现
Oct 26 Javascript
vue ssr 指南详读
Jun 29 Javascript
详解JavaScript的数据类型以及数据类型的转换
Apr 20 Javascript
微信小程序使用字体图标的方法
May 23 Javascript
Vue.js路由实现选项卡简单实例
Jul 24 Javascript
vue+elementUi图片上传组件使用详解
Aug 20 Javascript
VuePress 中如何增加用户登录功能
Nov 29 Javascript
js String.prototype.trim字符去前后空格的扩展
Aug 23 Javascript
element-ui中dialog弹窗关闭按钮失效的解决
Sep 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
Oracle 常见问题解答
2006/10/09 PHP
php 在字符串指定位置插入新字符的简单实现
2016/06/28 PHP
php求斐波那契数的两种实现方式【递归与递推】
2019/09/09 PHP
jquery 1.3.2 IE8中的一点点的小问题解决方法
2009/07/10 Javascript
AngularJS入门教程之多视图切换用法示例
2016/11/02 Javascript
jQuery根据ID、CLASS、等获取对象的实例
2016/12/04 Javascript
AngularJs 最新验证手机号码的实例,成功测试通过
2017/11/26 Javascript
mpvue将vue项目转换为小程序
2018/09/30 Javascript
小程序封装路由文件和路由方法(5种全解析)
2019/05/26 Javascript
Node.js API详解之 V8模块用法实例分析
2020/06/05 Javascript
详解Python程序与服务器连接的WSGI接口
2015/04/29 Python
通过数据库向Django模型添加字段的示例
2015/07/21 Python
Python WSGI的深入理解
2018/08/01 Python
详解windows python3.7安装numpy问题的解决方法
2018/08/13 Python
Python标准库shutil用法实例详解
2018/08/13 Python
对python打乱数据集中X,y标签对的方法详解
2018/12/14 Python
Python提取支付宝和微信支付二维码的示例代码
2019/02/15 Python
Python时间序列缺失值的处理方法(日期缺失填充)
2019/08/11 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
2020/12/07 Python
Html5导航栏吸顶方案原理与对比实现
2020/06/10 HTML / CSS
StubHub中国:购买和出售全球活动门票
2020/01/01 全球购物
新闻专业个人自我评价
2013/09/21 职场文书
医学专业毕业生个人求职信
2013/12/25 职场文书
学生喝酒检讨书
2014/02/06 职场文书
银行职员个人的工作自我评价
2014/02/15 职场文书
文明倡议书范文
2014/04/15 职场文书
园艺师求职信
2014/04/27 职场文书
民族团结演讲稿范文
2014/08/27 职场文书
公司法定代表人授权委托书
2014/09/29 职场文书
党员批评与自我批评发言稿
2014/10/14 职场文书
党员学习新党章思想汇报
2014/10/25 职场文书
2014年初级职称工作总结
2014/12/08 职场文书
2015年村计划生育工作总结
2015/04/28 职场文书
2015年高中生国庆节演讲稿
2015/07/30 职场文书
2016小学教师读书心得体会
2016/01/13 职场文书
经典哲理警句:志不真则心不热,心不热则功不贤
2019/11/14 职场文书