欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

angularjs封裝$http為factory的方法

 更新時(shí)間:2017年05月18日 17:21:47   作者:qingqingdezou_lei  
本篇文章主要介紹了angularjs封裝$http為factory的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

angularjs有本身封裝的ajax服務(wù)$http,因?yàn)橛脩T了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即可使用更方便的調(diào)用ajax,一般情況下headers為

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

params為一個(gè)json字符串

然后調(diào)用

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

但是其中又一次在項(xiàng)目中,后臺(tái)框架使用的是Struts框架,在一個(gè)Python中使用的很好的dataFactory,在這里的后臺(tái)取不到數(shù),最后發(fā)現(xiàn)是應(yīng)為header設(shè)置不對(duì),而且params的格式也不正確,可以把header修改為

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

上面dataFactory中else添加轉(zhuǎn)換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); 
      }); 

只是個(gè)人覺(jué)得這個(gè)方式比較方便,記錄下來(lái),希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論