【问题标题】:AngularJs - how move from $.ajax to $httpAngularJs - 如何从 $.ajax 移动到 $http
【发布时间】:2025-12-26 02:30:10
【问题描述】:

出于测试目的(为了使用 $httpBackend),我想将我的服务转换为使用 $http 而不是 jQuery $.ajax

我目前的服务是这样的

app.service('myService', function() {
  return { 
    getUserById: function(id) {
      return $.ajax({
        url: ...,
        type: 'GET'
        ...
      })
      .fail(function()){}
});

所以,服务处理失败,我让调用该方法的客户端来处理其余部分,如下所示:

myService.getUserById(123)
  .done(function(data){
    // use data
  })
  .always(function()){
   // do stuff
  }

现在,使用 Angular $http 我不确定如何重现相同的行为。 这是AngularJS website的用法:

$http({
  method: 'GET',
  url: '/someUrl'
})
.then(successCallback, errorCallback);

如何在客户端和服务之间“拆分”成功和错误回调函数?

【问题讨论】:

    标签: angularjs unit-testing jasmine


    【解决方案1】:

    你的服务看起来像这样:

    app.service('myService', function() {
      return { 
        getUserById: function(playerId){
         return $http.get('/someUrl/' + playerId, config).then(
          function(res){
           // handle any factory / decorating logic
           return res;
          }),
          function(err){
           //handle error
           return "error"; 
          }
        }
     }
    });
    

    客户端代码如下所示:

    myService.getUserById(123).then(
     function(success){
      // use data
     },
     function(error){
      // handle error
     }
    )
    

    【讨论】: