场景下开发-$http服务封装

 

 

$http服务封装

.factory('htp',function(){
    
//    htp.runServiceWithSession()
//    htp.runService()
//    htp.runService($http, $ionicLoading, "member.register",
//            $scope.user, function(data, status){}
    
    
//    错误处理 函数
    function callErrorFunction(errorFun, data, status, 
            $ionicLoading,$ionicPopup){

        if (errorFun)
            errorFun.call(this, data, status);
        else {
            // alert(msg);
            if (typeof (data) == 'string') {
                if ($ionicPopup)
                    $ionicPopup.alert({
                        template : data,
                        okText : "确定",
                        okType : 'button-confirm',
                        cancelType : 'button-cancel',
                        cssClass : 'custom_popup'
                    });
                else if ($ionicLoading)
                    $ionicLoading.show({
                        template : data,
                        duration : 2000
                    });
            } else {
                if(data.solution!=''&&data.solution!=undefined){
                    if ($ionicPopup)
                        $ionicPopup.alert({
                            template : data.rtnmessage + "," + data.solution,
                            okText : "确定",
                            okType : 'button-confirm',
                            cancelType : 'button-cancel',
                            cssClass : 'custom_popup'
                        });
                    else if ($ionicLoading)
                        $ionicLoading.show({
                            template : data.rtnmessage + "," + data.solution,
                            duration : 2000
                        });
                }else{
                    if ($ionicPopup)
                        $ionicPopup.alert({
                            template : data.rtnmessage,
                            okText : "确定",
                            okType : 'button-confirm',
                            cancelType : 'button-cancel',
                            cssClass : 'custom_popup'
                        });
                    else if ($ionicLoading)
                        $ionicLoading.show({
                            template : data.rtnmessage,
                            duration : 2000
                        });
                }
            }
        }
    }
    
    return{
//        init: function(){},
        runServiceWithSession: function($http, $ionicLoading, $state,
                method, bizObj,successFun, errorFun,timeOut){
            
            runService($http, $ionicLoading, method, bizObj, successFun, function(data,
                    status) {
                if (data.rtncode == 'account.session.timeout'
                        || data.rtncode == 'account.session.invalid'
                        || (data.rtncode != undefined && data.rtncode
                                .indexOf('need login') > -1)) {
                    $state.go('logon', {});
                } else {
                    AmApp.callErrorFunction(errorFun, data, status, $ionicLoading);
                }
            },timeOut);

        
            
        },
        runService: function($http, $ionicLoading, $ionicPopup, 
                method, bizObj,successFun, errorFun,timeOut){
            console.log(bizObj);
            if(typeof ($ionicPopup) == 'string'){
                timeOut = errorFun;
                errorFun = successFun;
                successFun = bizObj;
                bizObj = method;
                method = $ionicPopup;
                $ionicPopup = undefined;
            };
            var timeOut =(timeOut)?timeOut:1500;
    if(navigator && navigator.connection
                    && navigator.connection.type == 'none'){
                
            }else{
//                $http数据交互
                $http({
                    method : 'POST',
                    url : url,
                    data : bizObj,
                    headers : {
                        'Content-Type' : 'application/x-www-form-urlencoded;charset=UTF-8'
                    },
                    transformRequest : function(obj) {
                        var str = [];
                        for ( var p in obj)
                            str
                                    .push(encodeURIComponent(p)
                                            + "="
                                            + encodeURIComponent(encodeURIComponent(obj[p])));
                        return str.join("&");
                    },
                    timeout : timeOut
                    
                })
                .success(function(data, status, header, config){

                    if ($ionicLoading) $ionicLoading.hide();
                    if (status == 200) {
                        if (typeof (data) == 'string') {
                            callErrorFunction(errorFun, data, status,
                                    $ionicLoading, $ionicPopup);
                        } else {
                            if (data.issuccess == true)
                                successFun.call(this, data.result, status);
                            else
                                callErrorFunction(errorFun, data, status,
                                        $ionicLoading, $ionicPopup);
                        }
                    } else {
                        callErrorFunction(errorFun, "数据获取错误", status,
                                $ionicLoading, $ionicPopup);
                    }
                
                    
                })
                .error(function(data, status, header, config){
                    if ($ionicLoading)
                        $ionicLoading.hide();
                    if (status == 500)
                        callErrorFunction(errorFun, "检测到服务状态异常", status,
                                $ionicLoading, $ionicPopup);
                    else if (status == 0)
                        callErrorFunction(errorFun, method + "连接超时",
                                status, $ionicLoading, $ionicPopup);
                    else
                        callErrorFunction(errorFun, "网络连接错误", status,
                                $ionicLoading, $ionicPopup);
                    
                })
            }
            

            
        },
    }
    
})

 

posted @ 2017-08-08 18:33  alan-alan  阅读(390)  评论(0编辑  收藏  举报