在http post请求期间angularjs 400错误请求

时间:2017-02-11 01:17:30

标签: angularjs post request django-rest-framework

我正在使用Django Rest Framework API后端构建单页面Web应用程序。我有发送注册表格的问题。我认为日期格式的方式存在问题。 这是控制器的样子:

(function () {
'use strict';

angular
    .module('CityWits')
    .controller('standardController', standardController);

standardController.$inject = ['UserService','$location', '$rootScope', 'FlashService'];
function standardController(UserService, $location, $rootScope, FlashService) {
    var vm = this;

    vm.standard = standard;

    function standard() {
        vm.dataLoading = true;

        var str = [];
        for(var p in vm.user){
            str.push(encodeURIComponent(p) + "=" + encodeURIComponent(vm.user[p]));
        }
        str = str.join("&");

        UserService.CreateStandard(vm.user)
            .then(function (response) {
                if (response.success) {
                    FlashService.Success('Registration successful', true);
                    $location.path('/sign-in');
                } else {
                    alert(response.message)
                    vm.dataLoading = false;
                }
            });
    }

    function fixDate(date){


    }
}

})();

邮报要求:

 function CreateStandard(user) {
        console.log(user)
        return $http.post('http://127.0.0.1:8000/api/users/standard', user).then(handleSuccess, handleError('Error creating user'));
    }

从表单发送的json对象:

Object

DATE_OF_BIRTH : 1993年8月6日星期五00:00:00 GMT-0400(东部夏令时间) 名字 : “大卫” 性别 : “M” 姓 : “加洛韦” 用户 : 宾语 电子邮件 : “dcgallo93@gmail.com” 密码 : “*******” 的 : 宾语 的 : 对象

2 个答案:

答案 0 :(得分:0)

使用JSON.stringify发送user对象:

function CreateStandard(user) {
    console.log(user)
    return $http.post('http://127.0.0.1:8000/api/users/standard', JSON.stringify(user))
                .then(handleSuccess, handleError('Error creating user'));
}

答案 1 :(得分:0)

您必须设置HTTP标头"内容类型"如果要发布为JSON字符串,请转到JSON。

否则,数据需要采用 application / x-www-form-urlencoded 的形式,这意味着: parameter = value&amp; also = another < / EM>

DRF文档中突出显示here

  

注意:开发客户端应用程序时,请务必确保   您在HTTP中发送数据时设置Content-Type标头   请求。

     

如果您未设置内容类型,则大多数客户端将默认使用   &#39; application / x-www-form-urlencoded&#39;,这可能不是你想要的。

     

例如,如果您使用jQuery发送json编码数据   在.ajax()方法中,您应该确保包含contentType:   &#39;应用/ JSON&#39;设置。

坦率地说,JSON更清楚,所以我要做的是:

function CreateStandard(user) {
    return $http({
        method: 'POST', 
        url: 'http://127.0.0.1:8000/api/users/standard', 
        data: JSON.stringify(user),
        headers: {"Content-Type": "application/json"}
    }).then(...);
}