Ajax 成功是可行的,但不是这样,为什么?

Ajax 成功是可行的,但不是这样,为什么?,ajax,angularjs,http,Ajax,Angularjs,Http,请参阅- 在AngularJS中,我使用$http服务进行ajax调用。数据是使用“success”回调填充的,而不是使用“then”回调填充的。 我有两个问题- 1) 成功和成功有什么区别? 2) 何时使用“then”,何时使用“success”?据我所知,我主要在查询api或其他数据库时使用success。然后主要用于从自己的数据库请求数据。这是我的用法,也是我看到其他人使用的用法 成功和成功有什么区别 然后解析表示http响应的对象。也就是说,then方法的回调只接受一个具有以下结构的参数

请参阅-

在AngularJS中,我使用$http服务进行ajax调用。数据是使用“success”回调填充的,而不是使用“then”回调填充的。 我有两个问题-

1) 成功和成功有什么区别?
2) 何时使用“then”,何时使用“success”?

据我所知,我主要在查询api或其他数据库时使用success。然后主要用于从自己的数据库请求数据。这是我的用法,也是我看到其他人使用的用法

成功和成功有什么区别

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

  • data{string | Object}
    –使用转换函数转换的响应体
  • 状态–{number}
    –响应的HTTP状态代码
  • headers–{function([headerName])}
    –Header getter函数
  • 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;
};
何时使用“then”,何时使用“success”

为了与其他promise库保持一致,我建议您始终使用标准的
then
方法。如果将
$http.success
替换为
$http。那么
请注意,前者中
响应
对象中的内容与后者中的
响应.数据
等效:

$http.get(...).success(function (response) {
    return response;
}
相当于:

$http.get(...).then(function (response) {
    return response.data;
}
利用成功

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

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

我认为不同之处在于传递参数的内容

注意,
success
根据
$http
docs被弃用请使用一个链接确认,该链接表示success将被弃用。在您的回答中,“直接解析正文”是什么意思?我的意思是,当您使用
success
时,回调的第一个参数是http响应主体,而当您使用
然后使用
时,第一个参数是一个表示整个http响应的对象,带有标题、状态码等。。。我将对其进行编辑以使其更加清晰。一个查询,我看到成功返回了原始承诺,而随后返回了新承诺。我很困惑!这到底意味着什么,一个js fiddle之类的解释真的会很有帮助。我会在success中交换参数的名称,然后回调。在“then”函数中得到响应,在“success”函数中得到数据。
$http.get(url)
  .then(function(data){
     $scope.items = data.data
   });