微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

angularjs封装$http为factory的方法

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

rush:js;"> 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,config) { // defer.resolve(data); defer.reject(data); }); } else { $http({ url: endpoint,method: method,data: params,config) { // defer.resolve(data); defer.reject(data); }); } return defer.promise; }; return factory; });

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

rush:js;"> headers = {'Content-Type': 'application/json'};

params为一个json字符串

然后调用

rush:js;"> dataFactory.getlist("/api/checkDuplicate",'GET',params).then(function(data) { //success函数 },function(data){ //error函数 })

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

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

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

rush:js;"> 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 += p<a href="https://www.jb51.cc/tag/ara/" target="_blank" class="keywords">ara</a>m(innerObj) + '&'; 
      } 
     } 
     else if(value instanceof Object) { 
      for(subName in value) { 
       subValue = value[subName]; 
       fullSubName = name + '[' + subName + ']'; 
       innerObj = {}; 
       innerObj[fullSubName] = subValue; 
       query += p<a href="https://www.jb51.cc/tag/ara/" target="_blank" class="keywords">ara</a>m(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,data: p<a href="https://www.jb51.cc/tag/ara/" target="_blank" class="keywords">ara</a>m(p<a href="https://www.jb51.cc/tag/ara/" target="_blank" class="keywords">ara</a>ms),con<a href="https://www.jb51.cc/tag/fig/" target="_blank" class="keywords">fig</a>) { 
    // defer.resolve(data); 
    defer.reject(data); 
  }); </pre>

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐