我只想将以下JSON对象发送到我的API后端:
{
"username":"alex",
"password":"password"
}
所以我使用Angular $ http:
编写了以下函数$http(
{
method: 'POST',
url: '/api/user/auth/',
data: '{"username":"alex", "password":"alex"}',
})
.success(function(data, status, headers, config) {
// Do Stuff
})
.error(function(data, status, headers, config) {
// Do Stuff
});
我在POST文档的文档中读到Content-Type标题将自动设置为“application / json”。
但我意识到我在后端(Django + Tastypie)api上收到的内容类型是“text / plain”。
这会导致我的API无法正确响应此请求。我该如何管理这种内容类型?
答案 0 :(得分:2)
我前进的解决方案是始终将$ scope上的模型初始化为每个控制器上的空块{}。这保证了如果没有数据绑定到该模型,那么您仍然会有一个空块传递给$ http.put或$ http.post方法。
myapp.controller("AccountController", function($scope) {
$scope.user = {}; // Guarantee $scope.user will be defined if nothing is bound to it
$scope.saveAccount = function() {
users.current.put($scope.user, function(response) {
$scope.success.push("Update successful!");
}, function(response) {
$scope.errors.push("An error occurred when saving!");
});
};
}
myapp.factory("users", function($http) {
return {
current: {
put: function(data, success, error) {
return $http.put("/users/current", data).then(function(response) {
success(response);
}, function(response) {
error(response);
});
}
}
};
});
另一种选择是使用二进制||调用$ http.put或$ http.post时的运算符数据,以确保提供已定义的参数:
$http.put("/users/current", data || {}).then(/* ... */);
答案 1 :(得分:0)
试试这个;
$http.defaults.headers.post["Content-Type"] = "application/json";
$http.post('/api/user/auth/', data).success(function(data, status, headers, config) {
// Do Stuff
})
.error(function(data, status, headers, config) {
// Do Stuff
});