angularjs封装$http为factory的方法

发布时间 - 2026-01-11 01:10:25    点击率:

angularjs有本身封装的ajax服务$http,因为用惯了jQuery的ajax,所以,自己封装了一下angularjs的$http,代码如下

app.factory('dataFactory', function ($http, $q){ 
  var factory = {}; 
  factory.getlist = function(endpoint, method, headers, params) { 
    var defer = $q.defer(); 
    if (method == 'GET') { 
      $http({ 
        url: endpoint, 
        method: "GET", 
        headers: headers, 
        params: params, 
      }).success(function (data) { 
        defer.resolve(data); 
      }). 
      error(function (data, status, headers, config) { 
        // defer.resolve(data); 
        defer.reject(data); 
      }); 
    } else { 
      $http({ 
        url: endpoint, 
        method: method, 
        headers: headers, 
        data: params, 
      }).success(function (data) { 
        defer.resolve(data); 
      }). 
      error(function (data, status, headers, config) { 
        // defer.resolve(data); 
        defer.reject(data); 
      }); 
    } 
    return defer.promise; 
    }; 
    return factory; 
}); 

在controller中引入dataFactory和$http即可使用更方便的调用ajax,一般情况下headers为

headers = {'Content-Type': 'application/json'};

params为一个json字符串

然后调用

dataFactory.getlist("/api/checkDuplicate", 'GET', headers, params).then(function(data) { 
//success函数 
},function(data){ 
//error函数 
}) 

但是其中又一次在项目中,后台框架使用的是Struts框架,在一个Python中使用的很好的dataFactory,在这里的后台取不到数,最后发现是应为header设置不对,而且params的格式也不正确,可以把header修改为

 headers = {'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'};

上面dataFactory中else添加转换params代码:

var param = function(obj) { 
        var query = '', name, value, fullSubName, subName, subValue, innerObj, i; 
 
        for(name in obj) { 
         value = obj[name]; 
 
         if(value instanceof Array) { 
          for(i=0; i<value.length; ++i) { 
           subValue = value[i]; 
           fullSubName = name + '[' + i + ']'; 
           innerObj = {}; 
           innerObj[fullSubName] = subValue; 
           query += param(innerObj) + '&'; 
          } 
         } 
         else if(value instanceof Object) { 
          for(subName in value) { 
           subValue = value[subName]; 
           fullSubName = name + '[' + subName + ']'; 
           innerObj = {}; 
           innerObj[fullSubName] = subValue; 
           query += param(innerObj) + '&'; 
          } 
         } 
         else if(value !== undefined && value !== null) 
          query += encodeURIComponent(name) + '=' + encodeURIComponent(value) + '&'; 
        } 
        return query.length ? query.substr(0, query.length - 1) : query; 
        }; 
      $http({ 
        url: endpoint, 
        method: method, 
        headers: headers, 
        data: param(params), 
      }).success(function (data) { 
        defer.resolve(data); 
      }). 
      error(function (data, status, headers, config) { 
        // defer.resolve(data); 
        defer.reject(data); 
      }); 

只是个人觉得这个方式比较方便,记录下来,希望对大家的学习有所帮助,也希望大家多多支持。


# angularjs  # http  # 封装  # angularjs封装$http  # 使用Require.js封装原生js轮播图的实现代码  # AngularJS封装$http.post()实例详解  # 原生js封装自定义滚动条  # JS封装通过className获取元素的函数示例  # js封装tab标签页实例分享  # AngularJS封装指令方法详解  # JS封装的选项卡TAB切换效果示例  # 原生js封装的一些jquery方法(详解)  # javaScript封装的各种写法  # 的是  # 也不  # 在这里  # 很好  # 装了  # 更方便  # 惯了  # 大家多多  # ajax  # data  # resolve  # url  # jQuery  # success  # return  # promise  # method  # reject 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法  Python面向对象测试方法_mock解析【教程】  如何快速搭建高效WAP手机网站吸引移动用户?  如何快速搭建FTP站点实现文件共享?  Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】  谷歌Google入口永久地址_Google搜索引擎官网首页永久入口  如何在局域网内绑定自建网站域名?  网站制作软件免费下载安装,有哪些免费下载的软件网站?  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  非常酷的网站设计制作软件,酷培ai教育官方网站?  Laravel如何升级到最新版本?(升级指南和步骤)  Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置  原生JS实现图片轮播切换效果  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  Laravel怎么使用Intervention Image库处理图片上传和缩放  香港服务器租用费用高吗?如何避免常见误区?  青岛网站建设如何选择本地服务器?  Linux系统运维自动化项目教程_Ansible批量管理实战  Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  java ZXing生成二维码及条码实例分享  微信h5制作网站有哪些,免费微信H5页面制作工具?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  Python并发异常传播_错误处理解析【教程】  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  如何挑选最适合建站的高性能VPS主机?  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  如何正确下载安装西数主机建站助手?  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  网站制作报价单模板图片,小松挖机官方网站报价?  Python正则表达式进阶教程_复杂匹配与分组替换解析  教学论文网站制作软件有哪些,写论文用什么软件 ?  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  移动端脚本框架Hammer.js  微信小程序 五星评分(包括半颗星评分)实例代码  香港服务器租用每月最低只需15元?  北京专业网站制作设计师招聘,北京白云观官方网站?  网易LOFTER官网链接 老福特网页版登录地址  Laravel如何处理异常和错误?(Handler示例)  Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程  EditPlus中的正则表达式实战(5)  Python文件操作最佳实践_稳定性说明【指导】  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能  微信推文制作网站有哪些,怎么做微信推文,急?  Laravel Octane如何提升性能_使用Laravel Octane加速你的应用  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  C语言设计一个闪闪的圣诞树