17

我正在尝试使用 $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);
    })
}

任何人对如何使这项工作有任何想法?谢谢!

更新:

我现在将其作为 Jquery ajax 调用进行,效果很好。不过,让它与角度一起工作会很好。这是我的 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 );
            });

如果有人有任何想法如何对此进行角化,请告诉我,以正确的方式做会很好....

4

9 回答 9

7

在发出请求之前,您是否尝试过专门设置 Content-Type?

我有同样的问题,设置 Content-Type 解决了它。

$http.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded";
于 2013-10-08T22:20:49.043 回答
5

也许这会对你有所帮助。我遇到了与 get call 类似的问题:AngularJS $http 没有触发 get call

我用解决方案解决了这个问题,在这里找到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);
                    });
            });
于 2013-07-18T05:25:37.037 回答
2

我想,你只是忘了一些残忍的“)”试试

$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 ")"
 }

我还没有测试它,但我敢打赌,这是错误的问候

于 2013-04-30T17:44:46.897 回答
1

如果您使用的是 angular 1.1.4+,请检查此线程https://github.com/angular/angular.js/issues/2431

基本上,如果您在 Angular 上下文之外调用 $http,则需要将 $http 回调包装在 $scope.$apply 中。有关更多详细信息,请查看https://github.com/angular/angular.js/issues/2794#issuecomment-18807158

于 2013-07-11T08:44:20.497 回答
0

我正在努力解决同样的问题。我解决它的方法是使用 .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);
   }
);
于 2013-09-03T15:45:56.397 回答
0

您需要使用 $http 对象初始化控制器。您希望使用的其他 Angular 服务也是如此。

例如:

function myCtrl($scope, $http) {
  // controller code
}
于 2013-05-08T04:49:19.013 回答
0

你可以试试。

Angular js后调用:

$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) {
        }
于 2013-05-25T18:55:33.017 回答
0
//set arg
var arg = { name: $scope.name,
           tel: $scope.tel} 
// config 
var req = {
                method: 'POST',
                url: '/pServices/sellers/addNew',
                headers: {'Content-Type': 'application/json'},
                data: arg
            }
//POST data to server 
$http(req).then(function(data, status, headers, config){
                if(data['data']['status'])
                 console.log('success') ;

            }, function(data, status, headers, config){
                 console.log(data['data']['message']) 
            });
于 2020-05-27T11:36:46.343 回答
-1
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;
            }

        };
    }


]);
于 2014-08-30T20:17:54.147 回答