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 08 jQuery
jquery实现简单实用的轮播器
May 23 jQuery
jQuery日期范围选择器附源码下载
May 23 jQuery
jQueryeasyui 中如何使用datetimebox 取两个日期间相隔的天数
Jun 13 jQuery
jQuery.Form实现Ajax上传文件同时设置headers的方法
Jun 26 jQuery
基于JQuery的Ajax方法使用详解
Aug 16 jQuery
如何快速解决JS或Jquery ajax异步跨域的问题
Jan 08 jQuery
jquery实现选项卡切换代码实例
May 14 jQuery
Jquery实现获取子元素的方法分析
Aug 24 jQuery
jquery弹窗时禁止body滚动条滚动的例子
Sep 21 jQuery
JQuery 实现文件下载的常用方法分析
Oct 29 jQuery
jquery实现烟花效果(面向对象)
Mar 10 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
德劲1103的维修打理经验
2021/03/02 无线电
Laravel 5 框架入门(一)
2015/04/09 PHP
Zend Framework教程之Zend_Config_Xml用法分析
2016/03/23 PHP
docker-compose部署php项目实例详解
2019/07/30 PHP
可以文本显示的公告栏的js代码
2007/03/11 Javascript
简明json介绍
2008/09/28 Javascript
EasyUI中的tree用法介绍
2011/11/01 Javascript
js处理表格对table进行修饰
2014/05/26 Javascript
JS数组操作(数组增加、删除、翻转、转字符串、取索引、截取(切片)slice、剪接splice、数组合并)
2016/05/20 Javascript
JavaScript与java语言有什么不同
2016/09/22 Javascript
vue如何在自定义组件中使用v-model
2018/05/14 Javascript
vue 标签属性数据绑定和拼接的实现方法
2018/05/17 Javascript
Angular中使用ng-zorro图标库部分图标不能正常显示问题
2019/04/22 Javascript
vue 点击其他区域关闭自定义div操作
2020/07/17 Javascript
[48:24]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第一场 12.09
2020/12/12 DOTA
python登陆asp网站页面的实现代码
2015/01/14 Python
Python OpenCV实现图片上输出中文
2018/01/22 Python
django使用xlwt导出excel文件实例代码
2018/02/06 Python
详解python单元测试框架unittest
2018/07/02 Python
浅谈Python反射 &amp; 单例模式
2019/03/21 Python
pandas的连接函数concat()函数的具体使用方法
2019/07/09 Python
Python AutoCAD 系统设置的实现方法
2020/04/01 Python
CSS3实现银灰色动画效果的导航菜单代码
2015/09/01 HTML / CSS
台湾最大网路书店:博客来
2018/03/18 全球购物
zooplus德国:便宜地订购动物用品、动物饲料、动物食品
2020/05/06 全球购物
Linux如何为某个操作添加别名
2013/03/01 面试题
公司行政经理岗位职责
2013/12/24 职场文书
职业规划书如何设计?
2014/01/09 职场文书
厂办主管岗位职责范本
2014/02/28 职场文书
个人承诺书怎么写
2014/05/24 职场文书
运动会方阵口号
2014/06/07 职场文书
医院领导班子查摆问题对照检查材料思想汇报
2014/10/08 职场文书
暗恋桃花源观后感
2015/06/12 职场文书
小学四年级作文之写景
2019/08/23 职场文书
数据库连接池
2021/04/06 MySQL
前端框架ECharts dataset对数据可视化的高级管理
2022/12/24 Javascript