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 19 jQuery
jquery replace方法去空格
May 08 jQuery
jquery网页加载进度条的实现
Jun 01 jQuery
Jquery EasyUI $.Parser
Jun 02 jQuery
jQuery初级教程之网站品牌列表效果
Aug 02 jQuery
原生JS与jQuery编写简单选项卡
Oct 30 jQuery
jQuery读取本地的json文件(实例讲解)
Oct 31 jQuery
前端html中jQuery实现对文本的搜索功能并把搜索相关内容显示出来
Nov 14 jQuery
详解jQuery中的isPlainObject()使用方法
Feb 27 jQuery
jQuery实现文件编码成base64并通过AJAX上传的方法
Apr 12 jQuery
jQuery实现的手动拖动控制进度条效果示例【测试可用】
Apr 18 jQuery
jQuery阻止事件冒泡实例分析
Jul 03 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
paypal即时到账php实现代码
2010/11/28 PHP
PHP多文件上传实例
2015/07/09 PHP
PHP微信开发之根据用户回复关键词\位置返回附近信息
2016/06/24 PHP
php flush无效,IIS7下php实时输出的方法
2016/08/25 PHP
PHP+redis实现的限制抢购防止商品超发功能详解
2019/09/19 PHP
js 数据类型转换总结笔记
2011/01/17 Javascript
固定网页背景图同时保持图片比例的思路代码
2013/08/15 Javascript
Javascript控制页面链接在新窗口打开具体方法
2013/08/16 Javascript
jQuery菜单插件superfish使用指南
2015/04/21 Javascript
JQuery查找DOM节点的方法
2015/06/11 Javascript
js实现汉字排序的方法
2015/07/23 Javascript
举例讲解jQuery中可见性过滤选择器的使用
2016/04/18 Javascript
Vue AST源码解析第一篇
2017/07/19 Javascript
Python 使用os.remove删除文件夹时报错的解决方法
2017/01/13 Python
用virtualenv建立多个Python独立虚拟开发环境
2017/07/06 Python
用pandas按列合并两个文件的实例
2018/04/12 Python
python读取xlsx的方法
2018/12/25 Python
基于wxPython的GUI实现输入对话框(2)
2019/02/27 Python
在pycharm中显示python画的图方法
2019/08/31 Python
Python拼接字符串的7种方式详解
2020/03/19 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
2020/03/10 Python
python使用for...else跳出双层嵌套循环的方法实例
2020/05/17 Python
如何基于Python Matplotlib实现网格动画
2020/07/20 Python
深入分析python 排序
2020/08/24 Python
Python自定义sorted排序实现方法详解
2020/09/18 Python
Python和Bash结合在一起的方法
2020/11/13 Python
pycharm远程连接服务器并配置python interpreter的方法
2020/12/23 Python
CSS3只让背景图片旋转180度的实现示例
2021/03/09 HTML / CSS
浅析HTML5页面元素及属性
2021/01/20 HTML / CSS
韩国休闲女装品牌网站:ANAIS
2016/08/24 全球购物
英国在线药房:Express Chemist
2019/03/28 全球购物
应届生高等护理求职信
2013/10/12 职场文书
党员干部廉政承诺书
2015/04/28 职场文书
2015年秋季灭鼠工作总结
2015/07/27 职场文书
MySQL 如何设计统计数据表
2021/06/15 MySQL
MySQL创建管理KEY分区
2022/04/13 MySQL