angularjs封裝$http為factory


angularjs有本身封裝的ajax服務$http,因為用慣了jQuery的ajax,所以,自己封裝了一下angularjs的$http,代碼如下
[javascript] view plain copy
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字符串
然后調用
[javascript] view plain copy
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代碼:
[javascript] view plain copy
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);  
            });  

只是個人覺得這個方式比較方便,記錄下來,分享一下,請多多指教。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM