全网整合营销服务商

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

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


相关文章: 建站VPS配置与SEO优化指南:关键词排名提升策略  如何在阿里云购买域名并搭建网站?  建站之星后台密码遗忘如何找回?  如何在企业微信快速生成手机电脑官网?  如何在阿里云完成域名注册与建站?  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  如何快速生成ASP一键建站模板并优化安全性?  C#如何在一个XML文件中查找并替换文本内容  建站之星如何实现PC+手机+微信网站五合一建站?  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  如何快速上传建站程序避免常见错误?  中山网站制作网页,中山新生登记系统登记流程?  定制建站平台哪家好?企业官网搭建与快速建站方案推荐  网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?  建站之星会员如何解锁更多建站功能?  建站之星客服服务时间及联系方式如何?  如何在橙子建站中快速调整背景颜色?  网站制作网站,深圳做网站哪家比较好?  如何用免费手机建站系统零基础打造专业网站?  电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?  如何实现建站之星域名转发设置?  如何通过虚拟机搭建网站?详细步骤解析  如何在Tomcat中配置并部署网站项目?  建站之星如何快速更换网站模板?  如何用wdcp快速搭建高效网站?  如何配置IIS站点权限与局域网访问?  电商网站制作公司有哪些,1688网是什么意思?  c# 服务器GC和工作站GC的区别和设置  如何通过免费商城建站系统源码自定义网站主题与功能?  网站制作免费,什么网站能看正片电影?  临沂网站制作企业,临沂第三中学官方网站?  制作网站的模板软件,网站怎么建设?  Android使用GridView实现日历的简单功能  自助网站制作软件,个人如何自助建网站?  网站制作员失业,怎样查看自己网站的注册者?  制作销售网站教学视频,销售网站有哪些?  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  北京制作网站的公司,北京铁路集团官方网站?  青浦网站制作公司有哪些,苹果官网发货地是哪里?  上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?  如何在服务器上三步完成建站并提升流量?  做企业网站制作流程,企业网站制作基本流程有哪些?  如何通过.red域名打造高辨识度品牌网站?  如何在IIS中新建站点并配置端口与IP地址?  成都响应式网站开发,dw怎么把手机适应页面变成网页?  建站之星如何保障用户数据免受黑客入侵?  高端企业智能建站程序:SEO优化与响应式模板定制开发  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  网站制作新手教程,新手建设一个网站需要注意些什么?  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种? 

您的项目需求

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