AngularJS使用$http.post之后后台无法收到数据
AngularJS中的post与jQuery中post的区别
对比:
AngularJS:
1 2 3 4 $http.post('/myserver' , {username : 'shang' }) .success(function ( ) { });
jQuery
1 2 3 $.post('/myserver' , {username : 'shang' }, function ( ) { });
后台Express接受
jq会把作为JSON对象的序列化, 而Angular不会
解决办法:
引入jquery (不推荐)
指定header
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 var myobject = {username : 'shang' };function ObjecttoParams (obj ) { var p = []; for (var key in obj) { p.push(key + '=' + encodeURIComponent (obj[key])); } return p.join('&' ); } $http({ method: 'POST' , url: url, data: ObjecttoParams(myobject), headers: {'Content-Type' :'application/x-www-form-urlencoded' } });
使用 angular-post-fix
https://gist.github.com/JensRantil/5713606
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 angular.module('http-post-fix' , [], function ($httpProvider ) { $httpProvider.defaults.headers.post['Content-Type' ] = 'application/x-www-form-urlencoded;charset=utf-8' ; $httpProvider.defaults.transformRequest = [function (data ) { var param = function (obj ) { var query = '' ; var name, value, fullSubName, 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; }; return angular.isObject(data) && String (data) !== '[object File]' ? param(data) : data; }]; });
参考文档
文章若有纰漏请大家补充指正,谢谢~~ http://blog.xinshangshangxin.com SHANG殇