由于Angular的POST请求文件类型为application/json,但是大多数服务器接受的请求类型为application/x-www-form-urlencoded(a=xxx&b=xxx)格式。所以很多情况下,我们并不能得到我们想要的结果,必须得改变POST来达到我们的目的。
1.修改POST
$http({
url:url,
method:'POST',
data:{
a:$scope.a,
b:$scope.b
},
header:{'Content-Type','application/x-www-form-urlcoded'},
transformRequset:fucntion(obj){ //obj是要传到后台的data
let arr=[];
for(name in obj){
arr.push(`${encodeURIComponent(name)}=${encodeURIComponent(obj[name])}`); //将不适合URL传输的字符转为适合的
}
return arr.join("&");
}
});
2.配置模块
mod.
config
(
function
(
$scope
,
$httpProvider
){
$httpProvider.defaults.
transformRequest
=
function
(
obj
){
var
arr
=
[];
for
(name
in
obj){
arr.
push
(
`${
encodeURIComponent(name)}=${encodeURIComponent(obj[name])}
`
);
}
return
arr.
join
(
"&"
);
};
$httpProvider.defaults.headers.post[
'Content-Type'
]
=
'application/x-www-form-urlencoded'
;
})
为了方便以后使用,最好是自己封装一个POST模块,这样以后在使用时,只需引入即可。
let commonMod
=angular.module
=(
"common",[]);
commonMod.
config(
function(
$httpProvider){
$httpProvider.defaults.
transformRequest
=
function(
obj){
let arr
=[];
for(name
in obj){
arr.
push(
`${
encodeURIComponent
(name)
}=${
encodeURIComponent
( obj[name])
}`);
}
return arr.
join(
"&");
};
$httpProvider.defaults.header.post[
'Content-Type']
=
'application/x-www-form-urlencoded';
});