$ http.post不是一个函数

时间:2016-12-10 12:58:02

标签: javascript angularjs http

我正在尝试将表单数据提交给我创建的API端点。我已在 PostMan 中对其进行了测试,API功能正常,我可以成功获取数据。但是当将该API端点连接到角度js中的函数时,我得到以下错误。

enter image description here

继承我的代码:

 $scope.saveSession = function() {

    $http.post("/session/survey", $scope.session).success(function(data, status) {
         $window.location.href = '/';

                console.log("Sucessfully getting data" + JSON.stringify(data));
    })
  }

注意:

$scope.session是使用ng-model标记填充的对象。 例如:

<input type="text" ng-model="session.title">

编辑(控制器代码):

// This is our controller for the bio page
var session = angular.module('session', ['sessionService'])

session.controller('sessionCtrl', function($scope, $http, $window, sessionServices) {

$scope.session = {};

$scope.saveSession = function() {

    $scope.session.sessionNo = 1;
    $scope.session.coach = "mmmm";
    $scope.session.modules = "wokr place";

    //console.log(user);
    $http.post("/session/survey", $scope.session).success(function(data, status) {
         $window.location.href = '/';
                console.log("Sucessfully getting added bio" + JSON.stringify(data));
    })
    };

 });

4 个答案:

答案 0 :(得分:10)

那是因为.success()真的不是一个功能。作为the documentation explains$http.post()会返回一个承诺,您可以使用.then()链接

$http.post('/someUrl', data, config).then(successCallback, errorCallback);

答案 1 :(得分:5)

使用承诺,&#34;成功&#34;函数不存在于$ http对象中($ http成功和错误方法仅在较早版本的Angular 1.x中可用,但它们已在Angular 1.6中删除):

// Simple GET request example:
$http({
  method: 'GET',
  url: '/someUrl'
}).then(function successCallback(response) {
    // this callback will be called asynchronously
    // when the response is available
  }, function errorCallback(response) {
    // called asynchronously if an error occurs
    // or server returns response with an error status.
});

更多官方文档https://docs.angularjs.org/api/ng/service/ $ http

答案 2 :(得分:3)

这是因为你正在使用$http.post().success

尝试;

$scope.saveSession = function() {

$http.post("/session/survey", $scope.session).then(function(data, status) {
     $window.location.href = '/';

            console.log("Sucessfully getting data" + JSON.stringify(data));
})
}

我们使用.then从$ http服务返回“promise”。

希望它有所帮助!

答案 3 :(得分:0)

我刚刚处理了版本1.7.2和1.7.4的类似问题。这不是完全相同的问题,因为我从未使用过.success,但是我在这里发布是因为搜索时此帖子首先出现。

使用快捷方式版本$ http.post(/ api / endpoint /',data)时,我会得到:

  

“ TypeError:$ http.post不是函数”

如果我将它与the documentation中出现的回调完全一样使用:

$http({method: 'POST', url: '/api/endpoint/', data: $scope.newObject}).then(function (response) {
    $scope.status = response.status;
    $scope.data = response.data;
}, function (response) {
    $scope.data = response.data || 'Request failed';
    $scope.status = response.status;
});

我正在得到

  

“ TypeError:$ http(...)。然后不是函数”

在这种情况下,问题是我在同一个控制器中同时拥有$ resource和$ http。不确定这是否是预期的行为,但是删除$ resource会使$ http再次工作。 / p>

希望这对其他人有帮助