Ответ 1
Пробовал ли вы конкретно настраивать Content-Type перед тем, как сделать запрос?
У меня была такая же проблема, и настройка Content-Type исправила его.
$http.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded";
Я пытаюсь представить новый комментарий, используя $http. Возможно, вы догадались, что это из названия: он не работает. Я попробовал версию для берега и длинную версию, оба потерпели неудачу. Ошибка консоли.
Это мой код:
$scope.comment = {};
$scope.comment["comment"] = message; // message defined somewhere else
$http.post('/api/items/'+$scope.item.id+'/comments', $scope.comment)
.success(function(data, status, headers, config) {
// this isn't happening:
console.debug("saved comment", $scope.comment);
})
.error(function(data, status, headers, config) {
// this isn't happening:
console.debug("saved comment", $scope.comment);
})
}
Кто-нибудь понял, как это сделать? Спасибо!
UPDATE:
Теперь я делаю это как вызов jQuery ajax, который работает нормально. Было бы неплохо заставить его работать с angular. Это мой код JQuery:
var request = $.ajax({
url: '/api/items/'+$scope.item.id+'/comments',
type: "POST",
data: JSON.stringify($scope.comment),
contentType: 'application/json; charset=utf-8',
dataType: "json"
});
request.done(function(msg) {
console.debug("saved comment", $scope.comment);
});
request.fail(function(jqXHR, textStatus) {
alert( "Request failed: " + textStatus );
});
Если у кого-нибудь есть идеи, как угасить это, пожалуйста, скажите мне, было бы хорошо сделать это надлежащим образом....
Пробовал ли вы конкретно настраивать Content-Type перед тем, как сделать запрос?
У меня была такая же проблема, и настройка Content-Type исправила его.
$http.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded";
Возможно, это поможет вам. У меня была аналогичная проблема с вызовом: AngularJS $http не запускать вызов
Я решил это с помощью решения, найденного здесь https://github.com/angular/angular.js/issues/2794#issuecomment-18807158, поэтому я отключил свою функцию вызова с помощью $scope. $apply.
$scope.$apply(function() {
console.log('Klic na ID ' + data.context.id);
$scope.commonController.getData('orgunit/' + data.context.id + '?jsonDepth=3')
.success(function(workpositionData,status,headers,config) {
console.log('Klic na ID ' + data.context.id + ' OK');
$scope.workPositions = workpositionData.workPositions;
}).error(function(data,status,headers,config) {
commonController.error('Pri branju delovnih mest je prišlo do napake: '+data.description);
});
});
Я думаю, ты просто забыл о некоторых жестоких ")" попробуйте
$http.post('/api/ideas/'+$scope.item.id+'/comments', $scope.comment)
.success(function(data, status, headers, config) {
// this isn't happening:
console.debug("saved comment", $scope.comment);
}) //<-- damn ")"
.error(function(data, status, headers, config) {
// this isn't happening:
console.debug("saved comment", $scope.comment);
}) //<--- damn ")"
}
Я еще не тестировал его, но я уверен, что это ошибка рассматривает
Если вы используете angular 1.1.4+, проверьте этот поток https://github.com/angular/angular.js/issues/2431.
В принципе, если вы вызываете $http вне контекста angular, вам нужно обернуть $call callback в $scope. $apply. Для более подробной информации смотрите https://github.com/angular/angular.js/issues/2794#issuecomment-18807158
Вам нужно инициализировать контроллер с помощью объекта $http. То же самое касается других сервисов Angular, которые вы хотите использовать.
например:.
function myCtrl($scope, $http) {
// controller code
}
Вы можете попробовать.
Angular js post call:
$http({
url:'/api/ideas/'+$scope.item.id+'/comments', $scope.comment,
method : 'POST'
}).success(function(data, status, headers, config){
}).error(function(data, status, headers, config){
});
Контроллер отдыха:
@RequestMapping
(value = "/api/ideas/{item_id}/comments/{comment}", method = RequestMethod.POST)
@ResponseStatus(HttpStatus.OK)
public void updateComments(@PathVariable String item_id,@PathVariable String comment) {
}
Я боролся с той же проблемой. То, как я решил, это использовать .then() и регистрировать успешные и обратные вызовы ошибок в качестве аргументов. В вашем случае:
$http.post('/api/items/'+$scope.item.id+'/comments', $scope.comment)
.then(
// success callback
function(response) {
console.debug("success - saved comment", $scope.comment);
},
// error callback
function(response) {
console.debug("error - saved comment", $scope.comment);
}
);
$http.post('/api/ideas/'+$scope.item.id+'/comments', $scope.comment).success(function(data, status, headers, config) {}).error(function(data, status, headers, config) {});
angular.module('RestService', [
]).factory('$RestService', [
'$http', 'ApiUrl',
function ($http, ApiUrl) {
return {
Functioname: function (request) {
var Requesturl = ApiUrl + "/Functionname";//www.test.com/getuserdata
return this.Post(Requesturl, request);//request :parameter which you want to pass in post request
},
Post: function (ResultUrl, RequestParameterData) {
var PostResponse = $http({
url: ResultUrl,
method: "POST",
dataType: "",
headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' },
data: RequestParameterData
});
return PostResponse;
},
Get: function (ResultUrl, RequestParameterData) {
var PostResponse = $http({
url: ResultUrl,
method: "GET",
dataType: "",
headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' },
data: RequestParameterData
});
return PostResponse;
}
};
}
]);