Angular JS成功但不是,为什么?

时间:2015-09-19 14:41:30

标签: ajax angularjs http

请参阅 - http://jsfiddle.net/U3pVM/18728/

var app = angular.module("myapp", []);
app.controller("mycontroller", function($scope, $http, $timeout) {
    var url = "http://www.dummyurl.com";
    $http.get(url).success(
        function(response) {
              $scope.items = response;
    });
});

在Angular JS中,我正在使用$ http服务进行ajax调用。使用"成功"来填充数据。回调,而它没有使用"然后"打回来。 我有两个问题 -

1)成功之间有什么区别? 2)何时使用"然后",何时到"成功"?

3 个答案:

答案 0 :(得分:2)

  

成功与否之间有什么区别?

then解析代表您的http响应的对象。也就是说,then方法的回调只接受一个具有以下结构的参数:

  • data – {string|Object} - 使用转换函数转换的响应体。
  • status – {number} - 响应的HTTP状态代码。
  • headers – {function([headerName])} - 标题获取功能。
  • config – {Object} - 用于生成请求的配置对象。
  • statusText – {string} - 响应的HTTP状态文本。

另一方面,success是一种速记函数,它将http响应的不同属性(除了不太有用的statusText)传播到不同的参数中。因此,success回调的第一个参数将仅包含http响应的响应主体(属性response.data)。

下面的代码取自角度1.4.5,我能够找到它,因为角度为1.0.0:

promise.success = function(fn) {
   promise.then(function(response) {
      fn(response.data, response.status, response.headers, config);
   });
   return promise;
};
  

何时使用“then”,何时使用“成功”?

为了与其他promise库保持一致,我建议您始终使用标准then方法。如果您将$http.success替换为$http.then,请注意前者response对象中的内容相当于后者中的response.data

$http.get(...).success(function (response) {
    return response;
}

相当于:

$http.get(...).then(function (response) {
    return response.data;
}

答案 1 :(得分:2)

使用成功

$http.get(url)
  .success(function(response) {
    $scope.items = response;
  });
});

然后使用

$http.get(url)
  .then(function(data){
     $scope.items = data.data
   });

我认为不同的是传递参数的内容

答案 2 :(得分:0)

据我所知,我主要是在查询api或其他数据库时使用成功。然后主要用于从您自己的数据库请求数据。这是我的用法以及我看到其他人使用的内容。