原生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
myEvent.js javascript跨浏览器事件框架
Oct 24 Javascript
JavaScript中的类与实例实现方法
Jan 23 Javascript
jQuery使用after()方法在元素后面添加多项内容的方法
Mar 26 Javascript
jQuery+Pdo编写login登陆界面
Aug 01 Javascript
jquery对所有input type=text的控件赋值实现方法
Dec 02 Javascript
bootstrap日期插件daterangepicker使用详解
Oct 19 Javascript
解决LayUI表单获取不到data的问题
Aug 20 Javascript
Vue中util的工具函数实例详解
Jul 08 Javascript
解决vue中el-tab-pane切换的问题
Jul 19 Javascript
使用js和canvas实现时钟效果
Sep 08 Javascript
详解如何在Javascript中使用Object.freeze()
Oct 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实现即时输出、实时输出内容方法
2015/05/27 PHP
php自动识别文字编码并转换为目标编码的方法
2015/08/08 PHP
php生成带logo二维码方法小结
2016/04/08 PHP
PHP使用PDO、mysqli扩展实现与数据库交互操作详解
2019/07/20 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
2019/08/13 PHP
Javascript的一种模块模式
2008/03/22 Javascript
jQuery Ajax提交表单查询获得数据实例代码
2012/09/19 Javascript
js简单实现删除记录时的提示效果
2013/12/05 Javascript
原生javascript实现无间缝滚动示例
2014/01/28 Javascript
JavaScript实现Iterator模式实例分析
2015/06/09 Javascript
Ionic实现页面下拉刷新(ion-refresher)功能代码
2016/06/03 Javascript
关于不同页面之间实现参数传递的几种方式讨论
2017/02/13 Javascript
原生js实现可拖拽效果
2017/02/28 Javascript
js中DOM事件绑定分析
2018/03/18 Javascript
Node.js + express基本用法教程
2019/03/14 Javascript
微信小程序canvas开发水果老虎机的思路详解
2020/02/07 Javascript
js实现简单选项卡制作
2020/08/05 Javascript
python使用psutil模块获取系统状态
2016/08/27 Python
Python的CGIHTTPServer交互实现详解
2018/02/08 Python
Django rest framework工具包简单用法示例
2018/07/20 Python
Python多线程threading模块用法实例分析
2019/05/22 Python
python3.x+pyqt5实现主窗口状态栏里(嵌入)显示进度条功能
2019/07/04 Python
在python中使用pymysql往mysql数据库中插入(insert)数据实例
2020/03/02 Python
Django模板获取field的verbose_name实例
2020/05/19 Python
AmazeUI 图标的示例代码
2020/08/13 HTML / CSS
前端H5 Video常见使用场景简介
2020/08/21 HTML / CSS
英国排名第一的LED灯泡网站:LED Bulbs
2019/09/03 全球购物
2014年感恩母亲演讲稿
2014/05/27 职场文书
党员查摆剖析材料
2014/10/10 职场文书
小学教师师德师风自我评价
2015/03/04 职场文书
刑事上诉状范文
2015/05/22 职场文书
干部考核工作总结2015
2015/07/24 职场文书
教师读书活动心得体会
2016/01/14 职场文书
初二物理教学反思
2016/02/19 职场文书
nginx优化的六点方法
2021/03/31 Servers
「睡美人」爱洛公主粘土人开订
2022/03/22 日漫