我遇到了角度应用表单格式的问题。这是表单的html代码
<form class="col s8 center">
<h4>
{{greeting}}
</h4>
<div class="row">
<div class="input-field col s12">
<input id="email" type="email" class="validate" ng-model="user.email">
<label for="email">Email</label>
</div>
<div class="input-field col s12">
<input id="password" type="password" class="validate" ng-model="user.password">
<label for="password">Password</label>
</div>
</div>
<div class="row">
<div class="col s12">
<input type="submit" class="waves-effect waves-light btn pink" style="width:100%" value="Login" ng-click="login(user)">
</div>
</div>
</form>
这是我正在使用的角度登录功能
$scope.login = function(user) {
console.log(user.email);
$http({
url: baseDomain + 'auth/login/',
method: "POST",
data: user,
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
}).then(function(response) {
$window.localStorage.token = response.data.token;
}, function(response) {
console.log(response);
});
};
现在正在正确调用该函数,但是后期数据就像
{"password":"d","email":"d@s"}:""
做同样的事情是什么,我哪里出错?
**编辑**
发布数据来自firefox开发工具检查员。
答案 0 :(得分:1)
您需要正确序列化数据,因为&#34; key = vale&amp; key1 = value2&#34;此application/x-www-form-urlencoded
内容类型的字符串。为此,您可以使用内置服务$httpParamSerializer
:
$http({
url: baseDomain + 'auth/login/',
method: "POST",
data: $httpParamSerializer(user),
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
})
答案 1 :(得分:1)
我认为你应该参考这个解决方案:
指出
默认情况下,$ http服务将转换传出请求 将数据序列化为JSON,然后将其与内容一起发布 - 类型,&#34; application / json&#34;。当我们想要将值作为FORM发布时 发布后,我们需要更改序列化算法并发布数据 使用内容类型&#34; application / x-www-form-urlencoded&#34;。
所以你应该这样做:
$http({
method: 'POST',
url: url,
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
transformRequest: function(obj) {
var str = [];
for(var p in obj)
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
return str.join("&");
},
data: {username: $scope.userName, password: $scope.password}
}).success(function () {});