• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    关于二次封装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通用js封装
    上一篇:基于原生ajax与封装的ajax使用方法(详解)
    下一篇:Ajax的特性及乱码问题
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

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