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实现文章图片弹出放大效果
Apr 06 jQuery
使用jQuery,Angular实现登录界面验证码详解
Apr 27 jQuery
jQuery extend()详解及简单实例
May 06 jQuery
基于jQuery和CSS3实现APPLE TV海报视差效果
Jun 16 jQuery
使用jquery的jsonp如何发起跨域请求及其原理详解
Aug 17 jQuery
深入浅析angular和vue还有jquery的区别
Aug 13 jQuery
超好用的jQuery分页插件jpaginate用法示例【附源码下载】
Dec 06 jQuery
jquery-ui 进度条功能示例【测试可用】
Jul 25 jQuery
jQuery实现的分页插件完整示例
May 26 jQuery
如何基于jQuery实现五角星评分
Sep 02 jQuery
jQuery实现电梯导航模块
Dec 22 jQuery
jQuery class属性操作addClass()与removeClass()、hasClass()、toggleClass()
Mar 31 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
基于php无限分类的深入理解
2013/06/02 PHP
Laravel 5框架学习之Eloquent (laravel 的ORM)
2015/04/08 PHP
thinkPHP实现多字段模糊匹配查询的方法
2016/12/01 PHP
JavaScript 高级语法介绍
2009/06/15 Javascript
基于jquery的direction图片渐变动画效果
2010/05/24 Javascript
改写一个简单的菜单 弹性大小
2010/12/02 Javascript
javascript实现可改变滚动方向的无缝滚动实例
2013/06/17 Javascript
json的结构与遍历方法实例分析
2017/04/25 Javascript
Angular利用trackBy提升性能的方法
2018/01/26 Javascript
vue实现自定义日期组件功能的实例代码
2018/11/06 Javascript
layui问题之自动滚动二级iframe页面到指定位置的方法
2019/09/18 Javascript
对Layer弹窗使用及返回数据接收的实例详解
2019/09/26 Javascript
js实现简单的秒表
2020/01/16 Javascript
vue-router 路由传参用法实例分析
2020/03/06 Javascript
解决vuex改变了state的值,但是页面没有更新的问题
2020/11/12 Javascript
Python中的tuple元组详细介绍
2015/02/02 Python
浅析Python中的序列化存储的方法
2015/04/28 Python
Python日期的加减等操作的示例
2017/08/15 Python
Python实现的rsa加密算法详解
2018/01/24 Python
Python3.6使用tesseract-ocr的正确方法
2018/10/17 Python
Python设计模式之命令模式原理与用法实例分析
2019/01/11 Python
python面试题Python2.x和Python3.x的区别
2019/05/28 Python
解决pyecharts在jupyter notebook中使用报错问题
2020/04/23 Python
Django使用Profile扩展User模块方式
2020/05/14 Python
土木工程应届生求职信
2013/10/31 职场文书
制衣厂各岗位职责
2013/12/02 职场文书
挑战杯创业计划书的写作指南
2014/01/07 职场文书
电子商务专业自荐信
2014/06/02 职场文书
优秀党员学习焦裕禄精神思想汇报范文
2014/09/10 职场文书
2014年小学校长工作总结
2014/12/08 职场文书
2015年党风廉政承诺书
2015/01/22 职场文书
停课通知书
2015/04/24 职场文书
致接力运动员加油稿
2015/07/21 职场文书
如何用JavaScipt测网速
2021/05/09 Javascript
javascript之Object.assign()的痛点分析
2022/03/03 Javascript
Vue组件更新数据v-model不生效的解决
2022/04/02 Vue.js