<!DOCTYPE html>
<html lang="en" ng-app='test'>
<head>
<meta charset="UTF-8">
<title>angular 统一配置</title>
<script src="angular.js"></script>
<script>
let mod = angular.module('test',[]);
mod.config(function($httpProvider){
$httpProvider.defaults.transformRequest = function(obj){
let arr=[];
for(let name in obj){
arr.push(`${name}=${obj[name]}`)
}
return arr.join('&')
}
$httpProvider.defaults.headers.post['Content-Type']='application/x-www-form-urlencoded';
})
mod.controller('main', function($scope,$http){
$scope.calc = function(){
$http({
method: 'POST',
url: '1.php',
data: {
a: $scope.a,
b: $scope.b
}
}).then(res=>{
alert(res.data)
},()=>{
alert('error!')
});
}
})
</script>
</head>
<body ng-controller='main'>
<input type="text" ng-model='a'>
<input type="text" ng-model='b'>
<input type="button" value='计算' ng-click='calc()'>
</body>
</html>
今天学习了angularjs的$http中的POST方法,其中重要的及踩坑的地方记录一下.
1、$httpProvider.defaults.headers.post['Content-Type']='application/x-www-form-urlencoded';
当时非常自信,默写的,不是抄的,结果就悲剧了,最后怎么样也出不来。
查看network中的RequestHeaders发现:原生ajax或者jquery之类的,
content-type:application/x-www-form-urlencoded,格式诸如 a=1&b=2
然而 angular却是content-type:application/json,格式诸如 {a:1,b:2}
这就导致服务器不认识发送来的信息,所以要手动改成服务器认识的格式。
然而这就完了吗?没有,这只是声明了格式会给你服务器这种格式,
下面的transformRequest才是真正改变了发送数据的格式
2、$httpProvider.defaults.transformRequest = function(obj){
//这里的obj就是$http中的data
let arr = [];
for(let name in obj){
arr.push[`${name}=${obj[name]}`];
}
return arr.join('&')
}
打死都不相信,里面的是``,而不是'',深陷泥潭无法自拔。
另外,找了很久也没找到,``到底是什么意思。
再次感谢智能社blue老师,他现在加盟开课吧了,没事可以去他开课吧官网看看。