【问题标题】:Convert JS Post Ajax to AngularJS Post Factory将 JS Post Ajax 转换为 AngularJS Post Factory
【发布时间】:2018-05-20 02:03:41
【问题描述】:

我正在尝试将具有WSSE 身份验证的 Ajax 调用转换为 AngularJS 工厂。 方法是Post

其预期用途是访问 Adob​​e Analytics Rest API 并返回要转换为 JSON 的数据,然后使用 d3.js 进行可视化。

我不熟悉可以在 AngularJS $http post 调用中使用的属性,因此不确定执行 WSSE authdataTypecallback 等的正确方法是什么。 这是来自公共 github 存储库的原始 ajax 代码:

(function($) {
  window.MarketingCloud = {
    env:   {},
    wsse:  new Wsse(),

    /** Make the api request */
    /* callback should follow standard jQuery request format:
     *    function callback(data)
     */
    makeRequest: function (username, secret, method, params, endpoint, callback)
    {
        var headers = MarketingCloud.wsse.generateAuth(username, secret);
        var url = 'https://'+endpoint+'/admin/1.4/rest/?method='+method;
        $.ajax(url, {
            type:'POST',
            data: params,
            complete: callback,
            dataType: "text",
            headers: {
                'X-WSSE': headers['X-WSSE']
            }
        });
    }
  };
})(jQuery);

这是代码与纯 JS 一起使用的当前方式:

MarketingCloud.makeRequest(username, secret, method, params, endpoint, function(response) {
        data = JSON.parse(response.responseText);
});

我想把它分别转换成工厂和控制器。

这是我迄今为止为工厂所做的:

app.factory('mainFactory', ['$http', function($http) {
  var wsse = new Wsse ();
  return function(username, secret, method, params, endpoint) {
    return $http({
      method: 'POST',
      url: 'https://' + endpoint + '/admin/1.4/rest/?method=' + method,
      data: params,
      headers: {
        'X-WSSE': wsse.generateAuth(username, secret)['X-WSSE']
      },
      dataType: 'text',
    });
  };
}]);

这就是我的控制器:

app.controller('mainController', ['$scope', 'mainFactory', function($scope, mainFactory) {
  mainFactory.success(function(data) {
    $scope.data = data;
  });
}]);

目前我收到一条错误消息mainFactory.success is not a function,我认为这是因为工厂还没有工作。

【问题讨论】:

  • mainFactory.then(function(data) {怎么样?
  • 我看不到工厂中定义的任何success 方法?
  • ^^ 感谢您的建议,我已将成功方法添加到工厂但仍然出现错误。我试过mainFactory.then,但得到了同样的错误,除了它说.then is not a function

标签: javascript angularjs ajax api


【解决方案1】:

我自己解决了这个问题。我传递给工厂中第一个函数的参数已经全局定义,因此被覆盖。 反正第一个函数不是必需的。

这是工厂代码:

app.factory('mainFactory', ['$http', function($http) {
  var wsse = new Wsse ();
  return {
    getAnalytics : function (){
      $http({
          method: 'POST',
          url: 'https://' + endpoint + '/admin/1.4/rest/?method=' + method,
          data: params,
          headers: {
            'X-WSSE': wsse.generateAuth(username, secret)['X-WSSE']
          }
        })
        .success(function(data) {
          return data;
        })
        .error(function(err) {
          return err;
        });
    }
  };
}]);

这是控制器代码:

app.controller('mainController', ['$scope', 'mainFactory', function($scope, mainFactory) {
  $scope.title = "Inn Site";
  $scope.data = mainFactory.getAnalytics();
}]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 2021-02-14
    • 2020-05-20
    • 1970-01-01
    • 2016-11-10
    • 2016-03-21
    相关资源
    最近更新 更多