$httpProvider.defaults.transformRequest

来自ling
跳转至: 导航搜索

将形如 中的数据转换为form数据提交

$http.post("/url", {
      id: 1,
      name: "greengerong"
    }
});

效果等同

$http.post("/url", {
      id: 1,
      name: "greengerong"
    }, {
      transformRequest: function(request) {
        return $.param(request);
    }
});
MetronicApp.config(["$urlRouterProvider", "$stateProvider", "$httpProvider", function ($urlRouterProvider, $stateProvider, $httpProvider) {
    //$urlRouterProvider.otherwise("/main");

//    $httpProvider.defaults.transformRequest = function (data) {
//        if (data === undefined) {
//            return data;
//        }
//        return $.param(data);
//    };
 // Override $http service's default transformRequest  
    $httpProvider.defaults.transformRequest = [function(data)  
    {  
        /** 
         * The workhorse; converts an object to x-www-form-urlencoded serialization. 
         * @param {Object} obj 
         * @return {String} 
         */  
        var param = function(obj)  
        {    
            var query = '';  
            var name, value, fullSubName, subName, subValue, innerObj, i;  
            //console.log(obj);  
            for(name in obj)  
            {  
                value = obj[name];  
                //console.log(value);  
                if(value instanceof Array)  
                {  
                    //console.log("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)  
                {  
                     //console.log("object");  
                    for(subName in value)  
                    {  
                        subValue = value[subName];  
                        if(subValue != null){  
                            // fullSubName = name + '[' + subName + ']';  
                            //user.userName = hmm & user.userPassword = 111  
                            fullSubName = name + '.' + subName;  
                            // fullSubName =  subName;  
                            innerObj = {};  
                            innerObj[fullSubName] = subValue;  
                            query += param(innerObj) + '&';  
                        }  
                    }  
                }  
                else if(value !== undefined && value !== null) //&& value !== null  
                {  
                    //console.log("undefined");  
                    query += encodeURIComponent(name) + '=' + encodeURIComponent(value) + '&';  
                }  
            }  
            return query.length ? query.substr(0, query.length - 1) : query;  
        };  
        return angular.isObject(data) && String(data) !== '[object File]' ? param(data) : data;  
    }]  
    $httpProvider.defaults.useXDomain = true; 
    $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8'; 
    $httpProvider.defaults.headers.put['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';  
    $httpProvider.defaults.headers.common['Cache-Control'] = 'no-cache, no-store, must-revalidate';
    $httpProvider.defaults.headers.common['Pragma'] = 'no-cache';
    $httpProvider.defaults.headers.common['Expires'] = '0';
    $httpProvider.interceptors.push('securityInterceptor');
}]);

跨域的话,如下

    $httpProvider.defaults.useXDomain = true;  
       delete $httpProvider.defaults.headers.common['X-Requested-With'];  
    // Use x-www-form-urlencoded Content-Type  
     $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';  
     $httpProvider.defaults.headers.put['Content-Type'] = 'application/x-www-form-urlencoded';