表格未在角度js中正确发布

时间:2016-04-23 08:45:21

标签: javascript angularjs

我遇到了角度应用表单格式的问题。这是表单的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开发工具检查员。

2 个答案:

答案 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)

我认为你应该参考这个解决方案:

  

https://stackoverflow.com/a/24964658/3351642

指出

  

默认情况下,$ 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 () {});