【问题标题】:$http.get(...).success is not a function$http.get(...).success 不是函数
【发布时间】:2017-05-01 08:44:31
【问题描述】:

我有这个代码:

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

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

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

有什么想法吗?谢谢

【问题讨论】:

  • 本地环境和服务器上的版本是什么?顺便说一句,$http.get 返回 HttpPromise,所以你需要使用 then 代替
  • 你检查过你所有的javascripts在服务器环境中加载了吗?
  • 它的then() 不是success()
  • .success 语法在 Angular v1.4.3 之前是正确的。在此处查看旧文档:code.angularjs.org/1.4.3/docs/api/ng/service/$http
  • 并在 v.1.6 中正式删除

标签: javascript angularjs ajax function


【解决方案1】:

.success 语法在 Angular v1.4.3 之前是正确的。

对于 Angular v.1.6 之前的版本,您必须使用 then 方法。 then() 方法接受两个参数:successerror 回调,将使用响应对象调用。

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

类似这样的:

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

   },function (error){

   });
}

见参考here.

Shortcut 方法也可用。

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

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

您从响应中获得的数据应为JSON 格式。 JSON 是传输 数据 的好方法,并且在 AngularJS

中很容易使用

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

【讨论】:

  • 我尝试了 .then 并且工作正常,感谢 Alexandru-Ionut Mihai
  • .success.then 采用不同的参数,请考虑这一点
  • 如果重写现有代码,可能很容易将上面提到的两个参数函数(成功,错误)直接呈现,而不是像示例中那样分开。
  • "$resource(...).get(...).then 不是函数" ...为什么 angularJS 在一致性方面如此糟糕?
【解决方案2】:

这可能是多余的,但上面投票最多的答案是.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吗?在这种情况下,参数名称并不重要。
  • 我的代码有效。当我遵循上述答案时,我被卡住了。这也是一种实际获取数据并将其记录到控制台的方法的答案。这可以向开发人员展示如何在浏览器中测试他们的数据。我被问题标题中的相同错误引导到这里。
  • 旧代码$http.get('data/data.json').success(function(data) { data = data;} 我的回答是开发人员现在知道它的data.data 不能仅靠自己获取数据。因此我的回答对这个错误信息很重要。
  • 变量名不会有任何区别,它可以是success.dataresponse.data 或其他任何名称。你甚至可以使用donaldTrump.data 也可以。尽管您应该使用合理的变量名,但不确定这个是否有意义。
  • 这是因为 success 对象有一个名为 data 的数组,其中包含来自服务器响应的数据。您需要使用 <yourSuccessObjectName>.data 访问该数据数组
【解决方案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");
        });

上面的代码片段适用于登录页面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2016-02-05
    相关资源
    最近更新 更多