$http.get(...).success 不是函数

IT技术 javascript angularjs ajax function
2021-02-08 22:54:05

我有这个代码:

app.controller('MainCtrl', function ($scope, $http){
  $http.get('api/url-api')
    .success(function (data, status, headers, config){
     }
}

在我的本地环境中,工作正常,但在服务器中,返回此错误:

类型错误:$http.get(...).success 不是函数

有任何想法吗?谢谢

3个回答

.success直到 Angular v1.4.3 语法都是正确的。

对于 Angular v.1.6 以下的版本,您必须使用thenmethod。then()方法有两个参数:asuccess和一个error回调,它将被一个响应对象调用。

使用该then()方法,将callback函数附加到返回的promise.

像这样的东西:

app.controller('MainCtrl', function ($scope, $http){
   $http({
      method: 'GET',
      url: 'api/url-api'
   }).then(function (response){

   },function (error){

   });
}

请参阅此处的参考

Shortcut 方法也可以。

$http.get('api/url-api').then(successCallback, errorCallback);

function successCallback(response){
    //success code
}
function errorCallback(error){
    //error code
}

您从响应中获得的数据应符合JSON格式。 JSON是一种很好的数据传输方式,并且在AngularJS 中很容易使用

2 之间的主要区别在于.then()call 返回 a promise(使用从 a 返回的值解析callback.success()而是更传统的注册方式callbacks并且不返回 a promise

如果重新编写现有代码,可能很容易将上面提到的两个参数函数(成功、错误)呈现在内,而不是像示例中那样单独呈现。
2021-03-19 22:54:05
“$resource(...).get(...).then 不是函数”... 为什么 angularJS 在一致性方面如此糟糕?
2021-03-24 22:54:05
.success.then采用不同的参数,考虑到这一点
2021-04-03 22:54:05
我尝试了 .then 并且工作正常,感谢 Alexandru-Ionut Mihai
2021-04-09 22:54:05

这可能是多余的,但上面投票最多的答案说.then(function (success),从 Angular 版本开始,这对我不起作用1.5.8而是使用responsethen 在块内response.data得到了我正在寻找的 json 数据。

$http({
    method: 'get', 
    url: 'data/data.json'
}).then(function (response) {
    console.log(response, 'res');
    data = response.data;
},function (error){
    console.log(error, 'can not get data.');
});
这是因为成功对象有一个名为的数组data,用于保存作为服务器响应的数据。您需要访问该数据数组,使用 <yourSuccessObjectName>.data
2021-03-16 22:54:05
我的代码有效。当我按照上述答案进行操作时,我被卡住了。这也是一种实际获取数据并将其记录到控制台的方法。这可以向开发人员展示如何在他们的浏览器中测试他们的数据。我被问题标题中的完全相同的错误引导到这里。
2021-03-24 22:54:05
$http.get('data/data.json').success(function(data) { data = data;}带有我的回答的旧代码开发人员现在知道它data.data不能仅靠自己获取数据。因此我的回答对这个错误信息很重要。
2021-03-30 22:54:05
我的意思是……你试过了success.data吗?在这种情况下,参数名称并不重要。
2021-03-31 22:54:05
变量名称不会有任何区别,它可以是success.dataresponse.data或其他任何东西。你甚至可以使用 donaldTrump.data它也可以。尽管您应该使用合理的变量名称,但不确定这个名称是否有意义。
2021-04-02 22:54:05

如果您在 2017 年 10 月 21 日之前尝试使用 AngularJs 1.6.6,则以下参数将作为 .success 使用并且已耗尽。.then() 方法有两个参数:一个响应和一个错误回调,它将被一个响应对象调用。

 $scope.login = function () {
        $scope.btntext = "Please wait...!";
        $http({
            method: "POST",
            url: '/Home/userlogin', // link UserLogin with HomeController 
            data: $scope.user
         }).then(function (response) {
            console.log("Result value is : " + parseInt(response));
            data = response.data;
            $scope.btntext = 'Login';
            if (data == 1) {
                window.location.href = '/Home/dashboard';
             }
            else {
            alert(data);
        }
        }, function (error) {

        alert("Failed Login");
        });

上面的 snipit 适用于登录页面。