全网整合营销服务商

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

免费咨询热线: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封装  # 回调  # 报错  # 就可以  # 差异化  # 是有  # 都要  # 基础上  # 请重试  # 这是一个  # 再来  # 只需要  # 这篇文章  # 谢谢大家  # 也太  # 易用  # 它还  # 装了  # 绑定  # 解决这个问题  # 进行了 


相关文章: 金*站制作公司有哪些,金华教育集团官网?  简历在线制作网站免费,免费下载个人简历的网站是哪些?  制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?  建站主机选购指南:核心配置与性价比推荐解析  如何快速使用云服务器搭建个人网站?  江苏网站制作公司有哪些,江苏书法考级官方网站?  制作国外网站的软件,国外有哪些比较优质的网站推荐?  招商网站制作流程,网站招商广告语?  网站制作说明怎么写,简述网页设计的流程并说明原因?  如何注册花生壳免费域名并搭建个人网站?  如何破解联通资金短缺导致的基站建设难题?  定制建站是什么?如何实现个性化需求?  网站制作公司排行榜,抖音怎样做个人官方网站  北京的网站制作公司有哪些,哪个视频网站最好?  东莞专业制作网站的公司,东莞大学生网的网址是什么?  山东网站制作公司有哪些,山东大源集团官网?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  重庆网站制作公司哪家好,重庆中考招生办官方网站?  武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?  如何零基础在云服务器搭建WordPress站点?  如何在万网自助建站平台快速创建网站?  高防服务器租用如何选择配置与防御等级?  如何选择高效稳定的ISP建站解决方案?  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  建站中国官网:模板定制+SEO优化+建站流程一站式指南  如何通过宝塔面板实现本地网站访问?  公司网站制作费用多少,为公司建立一个网站需要哪些费用?  代刷网站制作软件,别人代刷火车票靠谱吗?  如何通过商城自助建站源码实现零基础高效建站?  如何通过虚拟主机快速完成网站搭建?  如何在腾讯云服务器上快速搭建个人网站?  c# 在ASP.NET Core中管理和取消后台任务  外汇网站制作流程,如何在工商银行网站上做外汇买卖?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  如何快速建站并高效导出源代码?  建站之星在线客服如何快速接入解答?  Android自定义控件实现温度旋转按钮效果  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  建站之星ASP如何实现CMS高效搭建与安全管理?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  建站主机默认首页配置指南:核心功能与访问路径优化  5种Android数据存储方式汇总  建站主机服务器选型指南与性能优化方案解析  如何在景安服务器上快速搭建个人网站?  ,想在网上投简历,哪几个网站比较好?  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  建站OpenVZ教程与优化策略:配置指南与性能提升  香港服务器如何优化才能显著提升网站加载速度?  如何通过服务器快速搭建网站?完整步骤解析 

您的项目需求

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