原生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 相关文章推荐
jQuery 跨域访问问题解决方法
Dec 02 Javascript
Jquery each方法跳出循环,并获取返回值(实例讲解)
Dec 12 Javascript
浅谈javascript运算符——条件,逗号,赋值,()和void运算符
Jul 15 Javascript
JAVA Web实时消息后台服务器推送技术---GoEasy
Nov 04 Javascript
JavaScript调试的多个必备小Tips
Jan 15 Javascript
Vue系列:通过vue-router如何传递参数示例
Jan 16 Javascript
vue.js实现简单轮播图效果
Oct 10 Javascript
浅谈Node.js之异步流控制
Oct 25 Javascript
JS实现百度搜索接口及链接功能实例代码
Feb 02 Javascript
详解Nuxt.js Vue服务端渲染摸索
Feb 08 Javascript
Vue 源码分析之 Observer实现过程
Mar 29 Javascript
element-ui中select组件绑定值改变,触发change事件方法
Aug 24 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/01/23 PHP
destoon安全设置中需要设置可写权限的目录及文件
2014/06/21 PHP
PHP完全二叉树定义与实现方法示例
2017/10/09 PHP
PHP框架实现WebSocket在线聊天通讯系统
2019/11/21 PHP
利用jquery包将字符串生成二维码图片
2013/09/12 Javascript
jquery实现华丽的可折角广告代码
2015/09/02 Javascript
基于jquery步骤进度条源码分享
2015/11/12 Javascript
javascript匀速运动实现方法分析
2016/01/08 Javascript
JavaScript动态添加事件之事件委托
2016/07/12 Javascript
JavaScript实现垂直向上无缝滚动特效代码
2016/11/23 Javascript
vue2.0实战之基础入门(1)
2017/03/27 Javascript
jQuery树插件zTree使用方法详解
2017/05/02 jQuery
js 客户端打印html 并且去掉页眉、页脚的实例
2017/11/03 Javascript
Vuejs 2.0 子组件访问/调用父组件的方法(示例代码)
2018/02/08 Javascript
微信小程序倒计时功能实例代码
2018/07/17 Javascript
ant-design-vue 实现表格内部字段验证功能
2019/12/16 Javascript
js实现无刷新监听URL的变化示例代码详解
2020/06/03 Javascript
vue webpack build资源相对路径的问题及解决方法
2020/06/04 Javascript
nodejs使用Sequelize框架操作数据库的实现
2020/10/21 NodeJs
[02:25]DOTA2英雄基础教程 熊战士
2014/01/03 DOTA
为Python程序添加图形化界面的教程
2015/04/29 Python
Python实现给文件添加内容及得到文件信息的方法
2015/05/28 Python
Python中if __name__ == '__main__'作用解析
2015/06/29 Python
浅谈python中get pass用法
2019/03/19 Python
python实现按首字母分类查找功能
2019/10/31 Python
哪种Python框架适合你?简单介绍几种主流Python框架
2020/08/04 Python
解决html5中的video标签ios系统中无法播放使用的问题
2020/08/10 HTML / CSS
explicit和implicit的含义
2012/11/15 面试题
秋季运动会活动方案
2014/02/05 职场文书
寄语十八大感言
2014/02/07 职场文书
医院护士见习期自我鉴定
2014/04/10 职场文书
安全生产一岗双责责任书
2014/07/28 职场文书
延安红色之旅心得体会
2014/10/07 职场文书
我们的节日元宵节活动总结
2015/02/06 职场文书
运动会宣传语
2015/07/13 职场文书
开学季:喜迎新生,迎新标语少不了
2019/11/07 职场文书