ajax - Angular JS 成功了,但后来不行了,为什么?

标签 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 调用。使用“success”回调填充数据,而不使用“then”回调填充数据。 我有 2 个问题 -

1) 成功和然后有什么区别? 2)什么时候用“then”,什么时候用“success”?

最佳答案

What is the difference between success and then?

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

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

另一方面,success 是一个速记函数,它将 http 响应的不同属性(除了不是很有用的 statusText 之外)分散到不同的参数中。因此,success 回调的第一个参数将仅包含 http 响应的响应正文(属性 response.data)。

下面的代码取自 Angular 1.4.5,我从 Angular 1.0.0 就可以找到它:

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

When to use "then", and when to "success"?

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

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

相当于:

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

关于ajax - Angular JS 成功了,但后来不行了,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32669491/

相关文章:

javascript - 从父级访问由 ng-repeat 填充的元素的方法

javascript - 带有 'input-group-append' 的 CSS Bootstrap 4 类无法正常工作。上周Styles的展示是对的

http - Angular2 http 默认 header 通用授权 token

javascript - Symfony2 和 AJAX

javascript - 防止通过 jquery ajax 调用在浏览器中显示参数。

javascript - Angularjs 过滤 ngRepeat 中的对象数组不会恢复具有空搜索属性的项目

http - 接收大文件的Web API的哪种http请求方法

php - 跨域发布,无需访问服务器

ruby-on-rails - Rails 3 中的 Ajax 错误处理

python - 使用 python Requests 库从 Twitter 的用户流中消费 - 如何检测断开连接?