AngulaJS $http post 注意事项

1.$http请求中必须添加header 并且 "Content-Type" = "application/x-www-form-urlencoded"

2.$http请求中body的数据格式必须为x=x&y=y&z=z。就是说如果我们的参数为json对象,那么必须要使用$.param() 进行序列化

不序列化请求可以成功,但是后台中参数值是接不到的,序列化后就可以成功接到值

使用$.param()进行序列化,需要引用jquery

var defer = $q.defer();
$http( {
    method: 'POST'
    ,params: { Account: Account ,PhoneUID:phoneUID,QutenType:pQutenType}
    ,data:   $.param( {'name':'1','age':3})
    ,url: apiUrl+"Question"
    ,headers:{
        'Content-Type':'application/x-www-form-urlencoded'
    }
} ).success( function ( data )
{
    defer.resolve( data );
} )
    .error( function ( data, status, headers, config )
    {
        defer.reject();
    } );

return defer.promise;

$.param是jquery中方法,如果不想使用Jquery可以使用下面的方式对参数进行序列化

在config中配置$http请求

.config(function($stateProvider, $urlRouterProvider,$ionicConfigProvider,$httpProvider) {
    // Intercept POST requests, convert to standard form encoding
    $httpProvider.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded";
    /**
     * The workhorse; converts an object to x-www-form-urlencoded serialization.
     * @param {Object} obj
     * @return {String}
     */
    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;
    };
	
 // Override $http service's default transformRequest
  $httpProvider.defaults.transformRequest = [function(data) {
    return angular.isObject(data) && String(data) !== '[object File]' ? param(data) : data;
  }];
在使用的时候就不用再处理了
var defer = $q.defer();
$http( {
    method: 'POST'
    ,params: { Account: Account ,PhoneUID:phoneUID,QutenType:pQutenType}
    ,data:   {'name':'1','age':3}
    ,url: apiUrl+"Question"
} ).success( function ( data )
    {
        defer.resolve( data );
    } )
    .error( function ( data, status, headers, config )
    {
        defer.reject();
    } );

return defer.promise;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值