全网整合营销服务商

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

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

AngularJS封装$http.post()实例详解

  AngularJS封装$http.post()实例详解

用了不是很长的时间跟了一个移动APP项目,用的是ionic + AngularJS + cordova框架,其间遇到过挺多问题,其中一个就是对Ajax的封装问题。

其实针对封装问题一直以来就没停止过谈论,不同的项目也有不同的需求,举个典型的例子,我在做这个项目的时候因为一开始没有考虑封装问题所以被批评了,而我的一个朋友却因为封装了受到了批评……很尴尬不是么。

那么对于是否要封装这个问题,究竟该怎么界定?其实这不是一个很复杂的问题,归根到底就是一个收益比率的问题,如果项目规模不是很大,那么过多考虑封装问题本身就没什么意义,对于项目的收益极低;而对于规模大的项目来说,如果不封装,那么潜在的风险就高得多,所以前期的投入也是值得的。

当然这个问题并不是我这样一个小白能掰扯清楚的事情,今天就来说说如果考虑封装的话,那么我会怎么处理。

angularjs中提供了一个服务http,它用来处理Ajax请求,这里我假设读者是了解angularjs的,所以直奔主题:对于post请求该如何处理封装。首先我需要确定一个事情,我能否排除所有使用者(项目团队成员)的个性化需求(需特殊处理的情况)。如果我不能,那么我该如果开放接口才能将post请求还原,所以我需要一个出口返回http.post()。

第二点,我需要考虑每一个使用者在应答到来时如何处理结果,针对success和error两种情况,我需要为他们提供一个处理逻辑的入口。

综合上面两点,我大概有了思路,我需要定义一个服务(公共服务),并且提供一个myPost方法,其中我允许使用者定义响应的回调,并且我允许他们取得更自由的处理方式,给他们一个原原本本的post()。好在js足够灵活,所以我可以这样来写:

service('myHttpService', ['$http', function ($http) {
  var myHttpPost = function (url, data, successFn, errorFn) {
  }
  return {
    myHttp: function (url, data, successFn, errorFn) {
      return myHttpPost(url, data, successFn, errorFn);
  }
  }
}]);

如上,我会return内部定义的方法,这个方法允许使用者定义successFn和errorFn,即相应成功和失败的回调,如此一来使用者大可放心的预先编写数据的处理逻辑,而无需关心其他细节。

另外,我允许使用者拿到更加灵活的post(),那么我是这样实现的:

var httpPromise = $http.post(url, data, {timeout: 30000});
if (!angular.isDefined(successFn)) {
  return httpPromise;
}

如果使用者并没有定义成功回调,好吧,这层封装就当是不存在,我会把post()丢出去,由调用者自行处理。而如果调用者想预先定义的话,我应当在封装中处理好他们的逻辑:

return httpPromise.then(
    function (response) {
     if (response.status) {
      return successFn(response);
     } else {
      /*其他处理*/
     }
    },
    function (error) {
     if (!angular.isDefined(errorFn)) {
      /*其他处理*/
     } else {
      return errorFn(error);
     }
    },
   function () {
    /*无论何总情况下都应该被执行的逻辑*/
   }
)

如此对于http.post()的封装基本上就算是完成了。其中有一个地方需要注意,如果我在处理successFn的时候,用了angular.isDefined()判断调用者是否定义了回调,如果没有,我将把处理权利交给调用者,如果已定义我将代为处理。其中then()方法比较有趣,因为http方法返回的是一个promise对象,在响应返回的时候可以通过then()来处理响应,其实完全可以通过promise.success()和promise.error()来处理不同响应状态的回调,但是用then()更好一些,因为它接收到的是完整的响应对象,而success()和error()会对响应对象进行解析,具体的差别读者可以通过console输出来看看。

以上是我对$http.post()的一次简单封装,虽然简陋,但是足以应付大多数情形,并且保留了更自由的处理方式,非常感谢和我一起讨论的朋友们,一起探讨这次的封装,收获很大,也希望对其他朋友所有帮助。

 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# AngularJS  # $http.post()  # Angular  # JS  # $http.post()详细介绍  # 解决angular的$http.post()提交数据时后台接收不到参数值问题的方法  # 对比分析AngularJS中的$http.post与jQuery.post的区别  # Angularjs中$http以post请求通过消息体传递参数的实现方法  # 后端接收不到AngularJs中$http.post发送的数据原因分析及解决办法  # AngularJS下$http服务Post方法传递json参数的实例  # AngularJS $http模块POST请求实现  # AngularJS $http post 传递参数数据的方法  # angularJS 发起$http.post和$http.get请求的实现方法  # 深入理解Angularjs中$http.post与$.post  # Angular利用HTTP POST下载流文件的步骤记录  # 的是  # 回调  # 可以通过  # 我在  # 我会  # 调用者  # 这个问题  # 就没  # 用了  # 提供一个  # 是一个  # 我是  # 他们的  # 也有  # 所以我  # 原原本本  # 和我  # 两种  # 我对  # 朋友们 


相关文章: 专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  如何通过.red域名打造高辨识度品牌网站?  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何撰写建站申请书?关键要点有哪些?  如何在云指建站中生成FTP站点?  网站制作公司广州有几家,广州尚艺美发学校网站是多少?  湖州网站制作公司有哪些,浙江中蓝新能源公司官网?  建站之星安装后界面空白如何解决?  太原网站制作公司有哪些,网约车营运证查询官网?  c# F# 的 MailboxProcessor 和 C# 的 Actor 模型  营销式网站制作方案,销售哪个网站招聘效果最好?  如何在香港服务器上快速搭建免备案网站?  微信小程序 input输入框控件详解及实例(多种示例)  如何快速打造个性化非模板自助建站?  专业网站建设制作报价,网页设计制作要考什么证?  如何在建站宝盒中设置产品搜索功能?  音乐网站服务器如何优化API响应速度?  宝塔新建站点报错如何解决?  制作网站怎么制作,*游戏网站怎么搭建?  淘宝制作网站有哪些,淘宝网官网主页?  天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?  上海网站制作网站建设公司,建筑电工证网上查询系统入口?  山东网站制作公司有哪些,山东大源集团官网?  建站之星安全性能如何?防护体系能否抵御黑客入侵?  Thinkphp 中 distinct 的用法解析  设计网站制作公司有哪些,制作网页教程?  黑客如何通过漏洞一步步攻陷网站服务器?  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  宿州网站制作公司兴策,安徽省低保查询网站?  C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化  如何在IIS中新建站点并配置端口与IP地址?  如何在企业微信快速生成手机电脑官网?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  网站好制作吗知乎,网站开发好学吗?有什么技巧?  专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?  子杰智能建站系统|零代码开发与AI生成SEO优化指南  如何通过服务器快速搭建网站?完整步骤解析  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  网页设计网站制作软件,microsoft office哪个可以创建网页?  如何在自有机房高效搭建专业网站?  如何选择CMS系统实现快速建站与SEO优化?  如何用wdcp快速搭建高效网站?  重庆市网站制作公司,重庆招聘网站哪个好?  详解jQuery中基本的动画方法  如何用PHP快速搭建CMS系统?  商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  制作宣传网站的软件,小红书可以宣传网站吗? 

您的项目需求

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