Javascript 如何包装$http服务并将其获取的数据用于控制器?
我想做的是包装$http调用,这样我就可以在我的应用程序中的任何地方使用它,而无需直接使用它。另外,根据我从服务器接收到的信息,我希望显示一条消息或其他常规内容,并分离逻辑。我的问题是我无法访问服务器发送的数据。我做错了什么 这是我的服务,我将$http包装在其中:Javascript 如何包装$http服务并将其获取的数据用于控制器?,javascript,angularjs,http,Javascript,Angularjs,Http,我想做的是包装$http调用,这样我就可以在我的应用程序中的任何地方使用它,而无需直接使用它。另外,根据我从服务器接收到的信息,我希望显示一条消息或其他常规内容,并分离逻辑。我的问题是我无法访问服务器发送的数据。我做错了什么 这是我的服务,我将$http包装在其中: Application.service('test', ['$http', function ($http) { this.test = function() { console.log('testt
Application.service('test', ['$http', function ($http)
{
this.test = function()
{
console.log('testttt');
}
this.fetchData = function(url, successCallback, errorCallback, parameters)
{
if (parameters)
{
$http.get(url, {params: parameters})
.success(function (data) {
successCallback();
})
.error(function (data) {
errorCallback();
})
.finally(function(data){
console.log(data);
});
}
else
{
$http.get(url)
.success(successCallback)
.error(errorCallback)
.finally(function(data) {
console.log('finally');
console.log(data);
if (data.message)
console.log(message);
});
}
}
}])
还有我称之为的控制器:
Application.controller('AccessLoggingController', ['$scope', '$http', 'initData', 'test', function($scope, $http, initData,test)
{
test.fetchData('/jewelry-room/move-user.action', function(){}, function(){}, {user:2000, task:7});
... etc more code
我认为您的回调应该采用数据参数,即
test.fetchData('/jewelry-room/move-user.action',函数(数据){},函数(数据){},{user:2000,任务:7});
在fetchData方法中,您应该传递数据参数,即
successCallback(数据)
您实际上不需要传递成功和错误回调,因为$http.get
返回一个承诺。从文件:
$HTTPAPI基于$q公开的延迟/承诺API
服务而对于简单的使用模式,这并不重要
高级用法熟悉这些API非常重要
以及他们提供的保证
为了理解延迟和承诺
fetchData
函数可能如下所示:
this.fetchData = function(url, parameters) {
return $http.get(url, {params: parameters}).then(
function(response) {
// do something
return response; // resolves a promise
},
function(response) {
// do something
return $q.reject("Unable to fetch!"); // rejects a promise
});
}
然后,您可以在控制器中使用服务:
test.fetchData('/jewelry-room/move-user.action', {user:2000, task:7}).then(
function(result) {
// success callback
$scope.action = result;
},
function(result) {
// error callback
$window.alert(result); // alerts "Unable to fetch!"
});
或者,如果出于某种原因仍要传递回调:
this.fetchData = function(url, successCallback, errorCallback, parameters) {
return $http.get(url, {params: parameters}).then(successCallback, errorCallback);
}
我明白你的意思,但我需要先在fetchData函数中处理响应,然后进一步传递数据,因为当服务器出错时,我需要向用户发送某种反馈,然后返回一个承诺,您可以链接它们。文档对承诺链有一些解释。请参阅我编辑的答案。其中的函数分别是成功回调和错误回调?完全正确。然后(successCallback、errorCallback、notifyCallback)。事情终于开始有了意义。谢谢你的帮助,康斯坦丁先生