jQuery进阶实践之利用最优雅的方式如何写ajax请求


Posted in jQuery onDecember 20, 2017

前言

jQuery确实是一个挺好的轻量级的JS框架,能帮助我们快速的开发JS应用,并在一定程度上改变了我们写JavaScript代码的习惯。

废话少说,直接进入正题,jQuery的ajax方法非常好用,这么好的东西,你想拥有一个属于自己的ajax么?接下来,我们来自己做一个简单的ajax吧。

首先需要一个配置文件

var api = {
 basePath: 'http://192.168.200.226:58080',
 pathList: [
  {
   name: 'agentHeartBeat',
   path:'/api/csta/agent/heartbeat/{{agentId}}',
   method:'post'
  },
  {
   name: 'setAgentState',
   path: '/api/csta/agent/state',
   method: 'post'
  },
  {
   name: 'getAgents',
   path: '/user/agent/{{query}}',
   method: 'get'
  }
 ]
}

然后需要一个方法,把配置文件生成接口

function WellApi(Config){
var headers = {};
var Api = function(){};
Api.pt = Api.prototype;
var util = {
 ajax: function(url, method, payload) {
  return $.ajax({
   url: url,
   type: method || "get",
   data: JSON.stringify(payload),
   headers: headers,
   dataType: "json",
   contentType: 'application/json; charset=UTF-8'
  });
 },
 /**
  * [render 模板渲染]
  * 主要用于将 /users/{{userId}} 和{userId: '89898'}转换成/users/89898,和mastache语法差不多,
  * 当然我们没必要为了这么小的一个功能来引入一个模板库
  * query字符串可以当做一个参数传递进来
  * 例如: /users/{{query}}和{query:'?name=jisika&sex=1'}
  * @Author Wdd
  * @DateTime 2017-03-13T19:42:58+0800
  * @param {[type]} tpl [description]
  * @param {[type]} data [description]
  * @return {[type]} [description]
  */
 render: function(tpl, data){
  var re = /{{([^}]+)?}}/;
  var match = '';

  while(match = re.exec(tpl)){
   tpl = tpl.replace(match[0],data[match[1]]);
  }
  return tpl;
 }
};
/**
 * [setHeader 暴露设置头部信息的方法]
 * 有些方法需要特定的头部信息,例如登录之后才能获取sesssionId,然后访问所有的接口时,必须携带sessionId
 * 才可以访问
 * @Author Wdd
 * @DateTime 2017-03-13T10:34:03+0800
 * @param {[type]} headers [description]
 */
Api.pt.setHeader = function(headers){
 headers = headers;
};
/**
 * [fire 发送ajax请求,this会绑定到每个接口上]
 * @Author Wdd
 * @DateTime 2017-03-13T19:42:13+0800
 * @param {[type]} pathParm [description]
 * @param {[type]} payload [description]
 * @return {[type]} [description]
 */
function fire(pathParm, payload){
 var url = util.render(this.path, pathParm);
 return util.ajax(url, this.method, payload);
}
/**
 * [for 遍历所有接口]
 * @Author Wdd
 * @DateTime 2017-03-13T19:49:33+0800
 * @param {[type]} var i [description]
 * @return {[type]} [description]
 */
for(var i=0; i < Config.pathList.length; i++){

 Api.pt[Config.pathList[i].name] = {
  path: Config.basePath + Config.pathList[i].path,
  method: Config.pathList[i].method,
  fire: fire
 };
}
return new Api();
}

试用一下

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title></title>
  <script src="http://cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script>
  <script src="api.js"></script>
  <script src="jquery-ajax.js"></script>
</head>
<body>
<script type="text/javascript">
  var saas = WellApi(api);
  saas.agentHeartBeat.fire({agentId: '5001@1011.cc'})
  .done(function(res){
    console.log('心跳成功');
  })
  .fail(function(res){
    console.log('心跳失败');
  });
</script>
</body>
</html>

优点与扩展

[优点]:类似与promise的回调方式

[优点]:增加一个接口只是需要增加一个配置文件,很方便

[扩展]:当前的ajax 的contentType我只写了json,有兴趣可以扩展其他的数据类型

[缺点]:没有对函数参数进行校验

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

jQuery 相关文章推荐
jquery仿微信聊天界面
May 06 jQuery
文本溢出插件jquery.dotdotdot.js使用方法详解
Jun 22 jQuery
jquery实现下拉菜单的手风琴效果
Jul 23 jQuery
jQuery实现table中两列CheckBox只能选中一个的示例
Sep 22 jQuery
jquery使用iscorll实现上拉、下拉加载刷新
Oct 26 jQuery
关于jQuery里prev()的简单操作代码
Oct 27 jQuery
jQuery操作attr、prop、val()/text()/html()、class属性
May 23 jQuery
Jquery动态列功能完整实例
Aug 30 jQuery
JQuery发送ajax请求时中文乱码问题解决
Nov 14 jQuery
jQuery实现动态加载瀑布流
Sep 01 jQuery
JQuery+drag.js上传图片并且实现图片拖曳
Nov 18 jQuery
jQuery实现动态向上滚动
Dec 21 jQuery
jQuery实现动态控制页面元素的方法分析
Dec 20 #jQuery
jquery自定义显示消息数量
Dec 19 #jQuery
jquery实现侧边栏左右伸缩效果的示例
Dec 19 #jQuery
jquery中done和then的区别(详解)
Dec 19 #jQuery
jQuery实现弹窗下底部页面禁止滑动效果
Dec 19 #jQuery
jQuery实现点击DIV同时点击CheckBox,并为DIV上背景色的实例
Dec 18 #jQuery
HTML5+JS+JQuery+ECharts实现异步加载问题
Dec 16 #jQuery
You might like
当海贼王变成JOJO风
2020/03/02 日漫
Thinkphp框架中D方法与M方法的区别
2016/12/23 PHP
php7 list()、session及其他模块的修改实例分析
2020/05/25 PHP
jsTree树控件(基于jQuery, 超强悍)[推荐]
2009/09/01 Javascript
五个jQuery图片画廊插件 推荐
2011/05/12 Javascript
jquery ajax提交整个表单元素的快捷办法
2013/03/27 Javascript
你必须知道的Javascript知识点之&quot;字面量和对应类型&quot;说明介绍
2013/04/23 Javascript
Jquery同辈元素选中/未选中效果的实例代码
2013/08/01 Javascript
千分位数字格式化(用逗号隔开 代码已做了修改 支持0-9位逗号隔开)的JS代码
2013/12/05 Javascript
JS获得选取checkbox整行数据的方法
2015/01/28 Javascript
JSON与XML优缺点对比分析
2015/07/17 Javascript
jQuery结合CSS制作动态的下拉菜单
2015/10/27 Javascript
AngularJS实现标签页的两种方式
2016/09/05 Javascript
js实现京东轮播图效果
2017/06/30 Javascript
JavaScript中的FileReader图片预览上传功能实现代码
2017/07/24 Javascript
mui上拉加载更多下拉刷新数据的封装过程
2017/11/03 Javascript
小白教程|一小时上手最流行的前端框架vue(推荐)
2019/04/10 Javascript
jQuery表单选择器用法详解
2019/08/22 jQuery
vue-video-player 断点续播的实现
2021/02/01 Vue.js
python编程开发之日期操作实例分析
2015/11/13 Python
Python语言描述最大连续子序列和
2017/12/05 Python
python使用tomorrow实现多线程的例子
2019/07/20 Python
在keras中实现查看其训练loss值
2020/06/16 Python
python写文件时覆盖原来的实例方法
2020/07/22 Python
Python 爬虫性能相关总结
2020/08/03 Python
python 可视化库PyG2Plot的使用
2021/01/21 Python
Smashbox官网:美国知名彩妆品牌
2017/01/05 全球购物
中国跨境电商:Tomtop
2017/03/16 全球购物
ALDO美国官网:加拿大女鞋品牌
2018/12/28 全球购物
家庭教育先进个人事迹材料
2014/01/24 职场文书
青年标兵事迹材料
2014/08/16 职场文书
初中学生操行评语
2014/12/26 职场文书
Java面试题冲刺第十九天--数据库(4)
2021/08/07 Java/Android
使用Redis实现分布式锁的方法
2022/06/16 Redis
python 镜像环境搭建总结
2022/09/23 Python
使用CSS实现按钮边缘跑马灯动画
2023/05/07 HTML / CSS