全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

关于二次封装jquery ajax办法示例详解

前言

Ajax 的全称是Asynchronous JavaScript and XML 异步的javaScript和XML

AJax所涉及到得技术:

       1.使用CSS和XHTML来表示。

       2. 使用DOM模型来交互和动态显示。

       3.使用XMLHttpRequest来和服务器进行异步通信。(核心)

       4.使用javascript来绑定和调用。

在我们前端处理数据的时候免不了要 ajax 与后台通信, ajax 是通过 XMLHttpRequest 对象与服务器进行通信的, jquery 在 XMLHttpReaquest 的基础上封装了 $.ajax 办法进行通信, $.ajax 办法实用性非常强,又非常简单易用。 本次二次封装 query ajax,参考 express 可以添加中间件处理数据,返回 Promise(Defferd) 对象,减少回调, 写 ajax 更加简洁、优雅。

$.ajax({
 url: url,
 data: data,
 dataType: 'json',
 type: 'get',
 success: new Function(){},
 error: new Function(){},
 .......
})

大部分的时候我们只需要传入 url 和 data, 就可以获取到我们想到的数据了。

痛点

但是在项目中使用 $.ajax, 它还是有一些痛点的

就是现在基本所有项目的 ajax 返回的数据也是进行了二次封装,加入了后台在处理业务逻辑时的信息。

从返回 data, 变成 了 {code: 200, data:{}, err_msg:''}

如果每一个 ajax 请求回来都要判断 code 是否正确再进行业务逻辑处理或者报错提醒, 整个项目下来也太冗余了,

$.ajax({
 url: url,
 data: data,
 success: function(data){
 if(data.code == 200) {
  dosomething()
 } else {
 alert(data.err_msg);
 }
 }
})

为了解决这个问题,我们用一个函数再次封装 $.ajax, 把这种正确与否判断再处理业务逻辑或者报错提醒提取出来做成公共的部分。

util.ajax = function(obj, successFn){
 $.ajax({
 url: obj.url || '/interface',
 data: obj.data || {},
 dataType: obj.dataType || 'json',
 type: obj.type || 'get',
 success: function(data){
  if (data.code != 200) {
  alert(data.err_msg);
  } else {
  successFn(data.data)
  }
 },
 error: function(err){
  alert(err)
 }
 })
}

promise

util.ajax 代替 $.ajax 使用就可以减少了业务错误的判断啦。 我们再来完善下, 不使用回调的方式,使用 promise 的方式调用, 减少回调,让代码更清晰。

util.ajax = function(obj) {
 var deferred = $.Deferred();
 $.ajax({
  url: obj.url || '/interface',
  data: obj.data || {},
  dataType: obj.dataType || 'json',
  type: obj.type || 'get',
 }).success(function (data) {
  if (data.code != 200) {
   deferred.reject(data.err_msg);
  } else {
   deferred.resolve(data.data)
  }
 }).error(function (err) {
  deferred.reject('接口出错,请重试');
 })
 return deferred.fail(function (err) {
  alert(err)
 });
}


// 调用
var obj = {
 url: '/interface',
 data: {
  interface_name: 'name',
  interface_params: JSON.stringify({})
 }
};
util.ajax(obj)
 .done(function(data){
  dosomething(data)
 })

中间件

这是一个公共的办法,但是有时候我们需要处理差异化啊, 我们参考 express 引入一个中间件来解决差异化问题。

util.ajax = function(obj, middleware) {
 var deferred = $.Deferred();
 $.ajax({
  url: obj.url || '/interface',
  data: obj.data || {},
  dataType: obj.dataType || 'json',
  type: obj.type || 'get',
 }).success(function (data) {
  if (data.code != 200) {
   deferred.reject(data.err_msg);
  } else {
   deferred.resolve(data.data)
  }
 }).error(function (err) {
  deferred.reject('接口出错,请重试');
 })

 // 添加中间件
 if(!middleware) {
  middleware = function(){};
 }
 return deferred.done(middleware).fail(function (err) {
  message({
   content: err,
   type: 'error',
   showLeftIcon: true,
   duration: 5000
  });
 });
}

// 调用
// 调用
var obj = {
 url: '/interface',
 data: {
  interface_name: 'name',
  interface_params: JSON.stringify({})
 }
};
var middleware = function(data) {
 data.forEach(function(item){
  item.fullName = item.firstName + item.lastName
 })
}
util.ajax(obj, middleware)
 .done(function(data){
  console.log(data.fullName)
 })

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# jquery  # ajax  # 二次封装  # 封装  # 再封装  # 基于jQuery的ajax方法封装  # 封装了jQuery的Ajax请求全局配置  # 对Jquery中的ajax再封装  # 简化操作示例  # jQuery Ajax 全局调用封装实例代码详解  # 浅析jQuery Ajax通用js封装  # 回调  # 报错  # 就可以  # 差异化  # 是有  # 都要  # 基础上  # 请重试  # 这是一个  # 再来  # 只需要  # 这篇文章  # 谢谢大家  # 也太  # 易用  # 它还  # 装了  # 绑定  # 解决这个问题  # 进行了 


相关文章: 香港服务器部署网站为何提示未备案?  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  如何快速查询网站的真实建站时间?  c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】  如何自定义建站之星网站的导航菜单样式?  建站之星ASP如何实现CMS高效搭建与安全管理?  建站之星如何实现五合一智能建站与营销推广?  建站之星logo尺寸如何设置最合适?  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  制作农业网站的软件,比较好的农业网站推荐一下?  如何在Windows 2008云服务器安全搭建网站?  建站主机CVM配置优化、SEO策略与性能提升指南  如何选择香港主机高效搭建外贸独立站?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  内部网站制作流程,如何建立公司内部网站?  建站之星在线版空间:自助建站+智能模板一键生成方案  如何快速启动建站代理加盟业务?  红河网站制作公司,红河事业单位身份证如何上传?  青岛网站建设如何选择本地服务器?  制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?  如何正确选择百度移动适配建站域名?  焦点电影公司作品,电影焦点结局是什么?  网站制作知乎推荐,想做自己的网站用什么工具比较好?  如何在西部数码注册域名并快速搭建网站?  b2c电商网站制作流程,b2c水平综合的电商平台?  Python多线程使用规范_线程安全解析【教程】  如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法  建站之星展会模版如何一键下载生成?  免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?  公司网站制作费用多少,为公司建立一个网站需要哪些费用?  建站VPS推荐:2025年高性能服务器配置指南  早安海报制作网站推荐大全,企业早安海报怎么每天更换?  如何在建站宝盒中设置产品搜索功能?  外贸公司网站制作,外贸网站建设一般有哪些步骤?  ,有什么在线背英语单词效率比较高的网站?  如何在Windows环境下新建FTP站点并设置权限?  如何通过老薛主机一键快速建站?  一键网站制作软件,义乌购一件代发流程?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  外汇网站制作流程,如何在工商银行网站上做外汇买卖?  网站网页制作专业公司,怎样制作自己的网页?  如何在云指建站中生成FTP站点?  定制建站流程步骤详解:一站式方案设计与开发指南  制作网站的模板软件,网站怎么建设?  常州自助建站工具推荐:低成本搭建与模板选择技巧  如何通过主机屋免费建站教程十分钟搭建网站?  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  广州商城建站系统开发成本与周期如何控制?  如何在阿里云服务器自主搭建网站?  建站之星与建站宝盒如何选择最佳方案? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。