$ http.get(…)。成功不是函数


108

我有此代码:

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

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

TypeError:$ http.get(...)。成功不是函数

有任何想法吗?谢谢


1
本地envm和服务器上的哪个版本?顺便说一句,$ http.get返回HttpPromise,所以你需要使用那么代替
格兰迪

您是否检查了服务器环境中所有JavaScript的负载?
bansi

7
then()不是success()
Patrick Evans

10
.success语法是正确的高达角1.4.3。在此处查看旧文档:code.angularjs.org/1.4.3/docs/api/ng/service/$http
Mihai MATEI

5
并正式在v.1.6删除
adamdport

Answers:


212

.success语法是正确的高达角1.4.3。

对于Angular v.1.6以下的版本,必须使用thenmethod。该then()方法有两个参数:a success和一个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()调用返回a promise(由a返回的值解析callback),而这.success()是更传统的注册方式,callbacks并且不返回a promise


我尝试了.then,然后工作正常,谢谢Alexandru-Ionut Mihai
Alejo Ribes

1
.success.then采用其他参数,请考虑一下
Max Koretskyi

如果重写现有代码,则可以很容易地在线显示上面提到的两个参数函数(成功,错误),而不是像示例中那样单独显示。
托尼·塞皮亚'18

“ $ resource(...)。get(...)。then不是一个函数” ...为什么angularJS在一致性方面如此糟糕?
Hobbamok

8

这也许是多余的,但是上面投票最多的答案说.then(function (success)了,在Angular版本上对我来说无效1.5.8。取而代之的是response在块内使用然后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.');
});

我的意思是...你尝试了success.data吗?在这种情况下,参数名称不是那么重要。
凯文B

我的代码有效。当我遵循以上答案时,我陷入了困境。这也是对实际获取数据并将其记录到控制台的一种方式的答案。这可以向开发人员展示如何在其浏览器中测试其数据。问题标题中的同样确切的错误引导着我。
伊恩·波斯顿

$http.get('data/data.json').success(function(data) { data = data;}带有我的答案的旧代码,开发人员现在知道它data.data不能仅仅自己获取数据。因此,我的回答对于此错误消息很重要。
伊恩·波斯顿

变量名称不会有任何区别,可以是success.dataresponse.data或其他任何名称。您甚至可以使用 donaldTrump.data该功能。尽管您应该使用明智的变量名,但不确定此名称是否有意义。
Gaurav Arya

这是因为成功对象有一个名为的数组data,用于保存来自服务器的响应数据。您需要使用<yourSuccessObjectName>.data
Gaurav Arya

3

如果您尝试从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适用于登录页面。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.