全网整合营销服务商

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

免费咨询热线: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++中引用和指针有什么区别?(代码说明)  网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?  定制建站模板如何实现SEO优化与智能系统配置?18字教程  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  如何安全更换建站之星模板并保留数据?  义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?  高防服务器租用如何选择配置与防御等级?  无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?  建站之星后台密码如何安全设置与找回?  在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?  沈阳制作网站公司排名,沈阳装饰协会官方网站?  云南网站制作公司有哪些,云南最好的招聘网站是哪个?  山东云建站价格为何差异显著?  代购小票制作网站有哪些,购物小票的简要说明?  如何用好域名打造高点击率的自主建站?  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  建站之星logo尺寸如何设置最合适?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  如何通过WDCP绑定主域名及创建子域名站点?  如何在阿里云虚拟主机上快速搭建个人网站?  如何快速生成橙子建站落地页链接?  小建面朝正北,A点实际方位是否存在偏差?  如何快速查询网址的建站时间与历史轨迹?  如何通过VPS建站无需域名直接访问?  如何选择最佳自助建站系统?快速指南解析优劣  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  如何通过.red域名打造高辨识度品牌网站?  jQuery 常见小例汇总  平台云上自主建站:模板化设计与智能工具打造高效网站  盘锦网站制作公司,盘锦大洼有多少5G网站?  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  家具网站制作软件,家具厂怎么跑业务?  想学网站制作怎么学,建立一个网站要花费多少?  西安大型网站制作公司,西安招聘网站最好的是哪个?  如何获取PHP WAP自助建站系统源码?  ,如何利用word制作宣传手册?  如何快速搭建个人网站并优化SEO?  如何在建站主机中优化服务器配置?  如何选择域名并搭建高效网站?  企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?  可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?  专业网站制作服务公司,有哪些网站可以免费发布招聘信息?  网站网页制作专业公司,怎样制作自己的网页?  建站之星北京办公室:智能建站系统与小程序生成方案解析  建站之星IIS配置教程:代码生成技巧与站点搭建指南  内网网站制作软件,内网的网站如何发布到外网?  c# F# 的 MailboxProcessor 和 C# 的 Actor 模型  如何选择适合PHP云建站的开源框架?  企业微网站怎么做,公司网站和公众号有什么区别? 

您的项目需求

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