Изменить тип контента на метод POST "application/json", API RESTful
Привет, ребята, я новичок в AngularJS, и мне нужна ваша помощь.
Все, что мне нужно, это просто добавить POST my json в API и получить правильный ответ.
Здесь мой JSON, где я не знаю, где его кодировать.
JSON
{
"userId" :"testAgent2",
"token" :"testAgent2",
"terminalInfo":"test2",
"forceLogin" :"false"
}
НЕ УВЕРЕН, ЕСЛИ Я делаю это правильно.
CONTROLLER.JS
function UserLoginCtrl($scope, UserLoginResource) {
//Save a new userLogin
$scope.loginUser = function() {
var loggedin = false;
var uUsername = $scope.userUsername;
var uPassword = $scope.userPassword;
var uforcelogin = 'true';
UserLoginResource.save();
}
}
SERVICES.JS
angular.module('UserLoginModule', ['ngResource'])
.factory('UserLoginResource', function($resource, $http) {
$http.defaults.useXDomain = true;
delete $http.defaults.headers.common['X-Requested-With'];
$http.defaults.headers.post["Content-Type"] = "application/json"; //NOT WORKING
return $resource('http://123.123.123.123\\:1234/SOME/LOCATION/THERE', {}, {
save: {
method:'POST',
headers: [{'Content-Type': 'application/json'}]
} //NOT WORKING EITHER
});
});
index.html
<html ng-app>
<head>
<script src="js/lib/angular/angular.js"></script>
<script src="js/lib/angular/angular-resource.js"></script>
</head>
<body ng-controller="UserLoginCtrl">
<form class="form-horizontal" name="form-horizontal" ng-submit="loginUser();">
<div class="button-login">
<!-- start: button-login -->
<button class="btn btn-primary" type="submit">Login</button>
</div>
</form>
</body>
</html>
Надеюсь, ты поможешь мне с этим парнем.
Я продолжал получать ответ вроде Unsupported Media Type...
Я не знаю, что еще делать...
Любые предложения или комментарии будут отличными.. СПАСИБО!
Ответы
Ответ 1
Проводка объекта JSON довольно проста в Angular. Все, что вам нужно сделать, это следующее:
Создать объект Javascript
Я буду использовать ваши точные свойства из вашего кода.
var postObject = new Object();
postObject.userId = "testAgent2";
postObject.token = "testAgent2";
postObject.terminalInfo = "test2";
postObject.forceLogin = "false";
Поместить объект в API
Чтобы отправить объект в API, вам просто нужна простая функция $http.post. См. Ниже:
$http.post("/path/to/api/", postObject).success(function(data){
//Callback function here.
//"data" is the response from the server.
});
Поскольку JSON является стандартным методом публикации в API, нет необходимости в reset. См. эту ссылку в ярлыках $http для получения дополнительной информации.
Что касается вашего кода, попробуйте изменить свой метод сохранения, включив этот простой метод почты.
Ответ 2
Предполагая, что вы можете использовать один из последних "неустойчивых" релизов, правильный синтаксис для изменения заголовка.
app.factory('BarService', function ($resource) {
var BarService = $resource('/foo/api/bars/:id', {}, {
'delete': {
method: 'DELETE',
headers: {
'Content-Type': 'application/json'
}
}
});
return BarService;
});
Я нахожу, что служба $resource является чрезвычайно мощным инструментом для создания приложений и созрела до такой степени, что вам не нужно больше возвращаться к $http. Плюс его активная запись, подобная шаблону, удобна.
Ответ 3
Правильный способ установки "Content-Type": "application/json" устанавливает функцию transformRequest для действия save.
angular.module('NoteWrangler')
.factory('NoteNgResource', function NoteNgResourceFactory($resource) {
// https://docs.angularjs.org/api/ngResource/service/$resource
return $resource("./php/notes/:id", {}, {
save : { // redefine save action defaults
method : 'POST',
url : "./php/notes", // I dont want the id in the url
transformRequest: function(data, headers){
console.log(headers);
headers = angular.extend({}, headers, {'Content-Type': 'application/json'});
console.log(headers);
console.log(data);
console.log(angular.toJson(data));
return angular.toJson(data); // this will go in the body request
}
}
});
});
Кажется, что нет способа очистки параметров запроса, запрос будет иметь...