angularjs封装$http为factory的方法


Posted in Javascript onMay 18, 2017

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); 
      });

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

Javascript 相关文章推荐
javascript 函数参数限制说明
Nov 19 Javascript
JS拖动技术 关于setCapture使用
Dec 09 Javascript
Jquery下判断Id是否存在的代码
Jan 06 Javascript
解读JavaScript代码 var ie = !-[1,] 最短的IE判定代码
May 28 Javascript
angular.foreach 循环方法使用指南
Jan 06 Javascript
通过js获取上传的图片信息(临时保存路径,名称,大小)然后通过ajax传递给后端的方法
Oct 01 Javascript
Bootstrap每天必学之栅格系统(布局)
Nov 25 Javascript
JS实现焦点图轮播效果的方法详解
Dec 19 Javascript
通过vue提供的keep-alive减少对服务器的请求次数
Apr 01 Javascript
关于Vue在ie10下空白页的debug小结
May 02 Javascript
使用vue2.0创建的项目的步骤方法
Sep 25 Javascript
使用vue3重构拼图游戏的实现示例
Jan 25 Vue.js
bootstrap表单示例代码分享
May 18 #Javascript
angularJS 发起$http.post和$http.get请求的实现方法
May 18 #Javascript
微信小程序 wx.request方法的异步封装实例详解
May 18 #Javascript
微信小程序中input标签详解及简单实例
May 18 #Javascript
JavaScript运动框架 链式运动到完美运动(五)
May 18 #Javascript
JavaScript运动框架 多值运动(四)
May 18 #Javascript
微信小程序页面开发注意事项整理
May 18 #Javascript
You might like
php 编写安全的代码时容易犯的错误小结
2010/05/20 PHP
详解PHP中foreach的用法和实例
2016/10/25 PHP
鼠标拖动实现DIV排序示例代码
2013/10/14 Javascript
JS获取几种URL地址的方法小结
2014/02/26 Javascript
jQuery插件实现控制网页元素动态居中显示
2015/03/24 Javascript
js实现头像图片切割缩放及无刷新上传图片的方法
2015/07/17 Javascript
JS实现的多张图片轮流播放幻灯片效果
2016/07/22 Javascript
Javascript中常用的检测方法小结
2016/10/08 Javascript
vue.js选中动态绑定的radio的指定项
2017/06/02 Javascript
jquery之基本选择器practice(实例讲解)
2017/09/30 jQuery
简单的vuex 的使用案例笔记
2018/04/13 Javascript
React中this丢失的四种解决方法
2019/03/12 Javascript
在vue中使用防抖函数组件操作
2020/07/26 Javascript
python获取元素在数组中索引号的方法
2015/07/15 Python
基于python中staticmethod和classmethod的区别(详解)
2017/10/24 Python
python3判断url链接是否为404的方法
2018/08/10 Python
Python中的取模运算方法
2018/11/10 Python
python对视频画框标记后保存的方法
2018/12/07 Python
Python的高阶函数用法实例分析
2019/04/11 Python
解析python的局部变量和全局变量
2019/08/15 Python
python openCV获取人脸部分并存储功能
2019/08/28 Python
python 命令行传入参数实现解析
2019/08/30 Python
python判断链表是否有环的实例代码
2020/01/31 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
2020/09/03 Python
python打包生成so文件的实现
2020/10/30 Python
ASP.NET Core中的配置详解
2021/02/05 Python
End Clothing美国站:英国男士潮牌商城
2018/04/20 全球购物
沙特阿拉伯排名第一的在线时尚购物应用程序:1Zillion
2020/08/08 全球购物
出纳的岗位职责
2013/11/09 职场文书
财务支持类个人的自我评价
2014/02/14 职场文书
大一新生检讨书
2014/10/29 职场文书
中标通知书范本
2015/04/17 职场文书
军训阅兵新闻稿
2015/07/17 职场文书
教师岗位说明书
2015/09/30 职场文书
学习计划是什么
2019/04/30 职场文书
修改MySQL的默认密码的四种小方法
2021/05/26 MySQL