【发布时间】:2018-05-20 02:03:41
【问题描述】:
我正在尝试将具有WSSE 身份验证的 Ajax 调用转换为 AngularJS 工厂。
方法是Post。
其预期用途是访问 Adobe Analytics Rest API 并返回要转换为 JSON 的数据,然后使用 d3.js 进行可视化。
我不熟悉可以在 AngularJS $http post 调用中使用的属性,因此不确定执行 WSSE auth、dataType、callback 等的正确方法是什么。
这是来自公共 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