原生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 金额格式化来回转换示例
Feb 23 Javascript
NODE.JS加密模块CRYPTO常用方法介绍
Jun 05 Javascript
网页中表单按回车就自动提交的问题的解决方案
Nov 03 Javascript
JS实现仿Windows经典风格的选项卡Tab切换代码
Oct 20 Javascript
AngularJS路由切换实现方法分析
Mar 17 Javascript
Angularjs 实现移动端在线测评效果(推荐)
Apr 05 Javascript
详解Vue2.0里过滤器容易踩到的坑
Jun 01 Javascript
JavaScript中递归实现的方法及其区别
Sep 12 Javascript
nginx部署访问vue-cli搭建的项目的方法
Feb 12 Javascript
layui点击按钮添加可编辑的一行方法
Aug 15 Javascript
JavaScript中的全局属性与方法深入解析
Jun 14 Javascript
VUE : vue-cli中去掉路由中的井号#操作
Sep 04 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与ASP
2006/10/09 PHP
基于PHP5魔术常量与魔术方法的详解
2013/06/13 PHP
分享一段php获取linux服务器状态的代码
2014/05/27 PHP
php使用curl代理实现抓取数据的方法
2017/02/03 PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
2017/06/06 PHP
laravel通过创建自定义artisan make命令来新建类文件详解
2017/08/17 PHP
PHP从零开始打造自己的MVC框架之入口文件实现方法详解
2019/06/03 PHP
JavaScript入门教程(3) js面向对象
2009/01/31 Javascript
IE 当eval遇上function的处理
2011/08/09 Javascript
js使用for循环查询数组中是否存在某个值
2014/08/12 Javascript
BootStrap智能表单实战系列(三)分块表单配置详解
2016/06/13 Javascript
jQuery实现模拟flash头像裁切上传功能示例
2016/12/11 Javascript
JS中绑定事件顺序(事件冒泡与事件捕获区别)
2017/01/24 Javascript
深入理解node.js之path模块
2017/05/03 Javascript
Vue.js结合bootstrap前端实现分页和排序效果
2018/12/29 Javascript
vue封装一个简单的div框选时间的组件的方法
2019/01/06 Javascript
如何解决.vue文件url引用文件的问题
2019/01/18 Javascript
小程序转发探索示例
2019/02/19 Javascript
详解Vue中的scoped及穿透方法
2019/04/18 Javascript
JavaScript实现美化滑块效果
2019/05/17 Javascript
详解如何提升JSON.stringify()的性能
2019/06/12 Javascript
javascript数组的定义及操作实例
2019/11/10 Javascript
js实现中文实时时钟
2020/01/15 Javascript
JS实现4位随机验证码
2020/10/19 Javascript
python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)
2019/06/27 Python
Win10下用Anaconda安装TensorFlow(图文教程)
2020/06/18 Python
Python如何读取、写入CSV数据
2020/07/28 Python
Python Selenium自动化获取页面信息的方法
2020/08/31 Python
python遍历路径破解表单的示例
2020/11/21 Python
Python3使用Selenium获取session和token方法详解
2021/02/16 Python
CSS3实现鼠标悬停显示扩展内容
2016/08/24 HTML / CSS
毕业实习评语
2014/02/10 职场文书
医学专业应届生的自我评价
2014/02/28 职场文书
为什么RedisCluster设计成16384个槽
2021/09/25 Redis
Mysql使用全文索引(FullText index)的实例代码
2022/04/03 MySQL
Android开发EditText禁止输入监听及InputFilter字符过滤
2022/06/10 Java/Android