TypeError:t(...)。success不是函数 - Angular

时间:2017-01-25 20:40:44

标签: javascript angularjs

我收到错误TypeError: t(...).success is not a function。我做了一些搜索,但能理解为什么它会导致我的错误。

我的JS代码如下所示。我究竟做错了什么?为什么我会收到此错误?

var app = angular.module('PriceListEditModule', ['ngRoute']);
app.controller('PriceListEditController', ["$scope", "$q", function ($scope, $q) {

    GetBrands();

    function GetBrands() {
        $http({
            method: 'Get',
            url: '/GetBrands'
        }).success(function (data, status, headers, config) {
            $scope.brands = data;
        }).error(function (data, status, headers, config) {
            $scope.message = 'Unexpected Error';
        });
    }
}]);

,错误如下

jquery:1 TypeError: t(...).success is not a function
    at i (jquery:1)
    at new <anonymous> (jquery:1)
    at Object.invoke (jquery:1)
    at v.instance (jquery:1)
    at pt (jquery:1)
    at p (jquery:1)
    at p (jquery:1)
    at jquery:1
    at jquery:1
    at p.$eval (jquery:1)

3 个答案:

答案 0 :(得分:1)

Angular没有成功使用http。

debug tool

$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.
  });

并且您没有在控制器中包含$ http作为参考。

app.controller('PriceListEditController', 
    ["$scope", "$q", "$http", function ($scope, $q, $http) {

你真的应该为http调用使用服务,而不是在你的控制器中使用它。

答案 1 :(得分:0)

更改它

在您的服务中(定义了$ http),创建一个方法

getBrands = function(){
    $http.get('/GetBrands', {})
        .then(function (result) {
            return result.data;
        });
}

并使用

从您的控制器中调用它
getBrands(data).then(function(data){
    //do some error checking and then assign
    $scope.brands = data;
})

Angular http与jQuery ajax调用略有不同,您发布的代码看起来非常类似于ajax调用而不是有角度的服务调用。 Angular不支持使用这种语法的回调。

答案 2 :(得分:0)

检查您的角度版本。根据他们的v1.5.11 documentation

  

弃用通知

     

$ http遗留承诺方法成功与错误   已弃用,将在v1.6.0中删除。使用标准然后方法   代替。

这意味着如果您使用的是早期版本,则会使用以下内容:

 $http({
     url: "/url",
     method: 'GET',
}).success(function (result) {
     //do success
}).error(function (data, status, headers, config) {
    //do error
});

如果您使用的是1.6.0或更新版本,则可以使用:

 $http({
     url: "/url",
     method: 'GET',
}).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.
  });

如果未定义$http,则不会将其注入控制器。将它注入您的控制器,如:

app.controller('controller', ['$scope','$http', function($scope,$http){}])