【问题标题】:AngularJS: Creating a $http serviceAngularJS:创建一个 $http 服务
【发布时间】:2013-08-01 02:21:17
【问题描述】:

我对 Angular 有点陌生,我正在尝试建立一个非常简单的 RPC 实现,它使用 angulars $http 服务(工厂)来完成这项工作。到目前为止,我的服务如下:

'use strict';

angular.module('xxx')
  .factory('rpcService', function ($http) {

    return {
      request: function(method, params, callback) {
        var service = method.split('.');
        params = params || {};
        params.method = service[1];
        return $http.post('/services/' + service[0] + '.sjs', params).then(function (response) {
            return response.data;
        });
      }
    }

  });

然后当我想使用该服务时,我会这样称呼它:

rpcService.request('Users.facebookLogin', { token: response.authResponse.accessToken })
  .then(function(response) {
    debugger;
    $rootScope.user = response.user;
    console.log($rootScope.user);
    $rootScope.loggedIn = true;
    $rootScope.$apply();
});

代码在调试器之后永远不会到达行;事实上,代码根本不会发出$http 请求。由于某种原因,它停止并且不会继续回调......或承诺......我对技术差异是什么感到有点困惑。 :)

话虽如此,我已经用$.ajax 测试了 POST 调用,一切都正常返回,所以我的 Angular 代码有些问题。

实际触发请求并与$.ajax 一起工作的代码:

'use strict';

angular.module('xxx')
  .factory('rpcService', function ($http) {

    return {
      request: function (method, params, callback) {
        var service = method.split('.');

        params = params || {};
        params.method = service[1];

        $.ajax('/services/' + service[0] + '.sjs', {
          type: 'POST',
          dataType: 'json',
          data: params,
          success: function(data, status, xhr) {
              if (callback) {
                  callback(data);
              }
          }
        });
      }
    }      
  });

我只是不确定为什么没有发出 XHR 请求。

【问题讨论】:

  • 你能分享完整的代码并设置一个plunker吗
  • 很遗憾,我无法为此设置 plunker,但让我添加更多代码。

标签: angularjs promise


【解决方案1】:

API 调用可能会出错,因此从未触发回调。尝试像这样添加error() 回调:

return $http("POST", '/services/' + service[0] + '.sjs', params)
    .error(function (response) {
        return 'blah';
    }).then(function (response) {
        return response.data;
    });

您可以在此演示中试用。您的代码实际上看起来不错。

Demo on jsFiddle

【讨论】:

  • 谢谢,但它不起作用。我根本没有收到来自我的服务器的响应!请求永远不会发出,因此不会出错。
  • 打开demo可以看到你的代码其实是ok的。而且您刚刚使用 $.ajax() 添加的代码不是 Angular 的方式。
  • 你怎么看没问题?我正在查看网络选项卡,但没有任何反应?原谅我的无知,但这不是问题吗?哈哈
  • 如果您使用 chrome,请按 f12 打开 web 调试器,然后单击页眉上的运行按钮。
  • 是的,当您这样做时,您是否在“网络”选项卡中看到与请求相关的任何内容?我没有。
猜你喜欢
  • 1970-01-01
  • 2014-08-28
  • 1970-01-01
  • 2011-02-12
  • 1970-01-01
  • 1970-01-01
  • 2013-04-20
  • 1970-01-01
  • 2017-12-05
相关资源
最近更新 更多