我在自定义服务中有这个全局方法。
/**
* Global service class for making http requests.
*/
app.service('API', function ($http) {
/**
* Process remote POST request to give URL with given params
* @param {String} url
* @param {String} POST params
* @return {JSON} response from server
*/
this.doHttpRequest = function (type, url, params) {
$http({
method: type,
url: url,
data:params,
timeout:2000,
headers: {"Content-Type": "application/json"}
})
.success(function (data, status, headers, config) {
// successful data retrieval
console.log("request success");
console.log("state: "+status);
return data;
})
.error(function (data, status, headers, config) {
// do some stuff
});
};
});
||
问题是,如果我试图从我的cotroler方法得到回应,我总是只是未定义。
/**
* Test of service
*/
$scope.serviceTest = function () {
var requestParams = {
"token":'test',
"data":{
"test":'test'
}
};
var url = $rootScope.apiBaseUrl + "user/update";
var result = API.doHttpRequest("POST", url, requestParams);
// HERE I GET UNDEFINED
console.log("Result is: " + result);
};
我对承诺表示赞同,但没有运气来获取数据。
问题是:
我应该如何修改我的代码以获取返回的值?
感谢您的帮助
答案 0 :(得分:1)
修改您的服务,使其不会在promise
返回的$http
上调用任何内容,同时注意return
。
app.service('API', function ($http) {
/**
* Process remote POST request to give URL with given params
* @param {String} url
* @param {String} POST params
* @return {JSON} response from server
*/
this.doHttpRequest = function (type, url, params) {
return $http({
method: type,
url: url,
data:params,
timeout:2000,
headers: {"Content-Type": "application/json"}
});
};
});
然后当您使用服务时,它会返回promise
,您可以在{/ 1}}和success
上运行
error
答案 1 :(得分:0)
这是我使用promises
和$ http请求
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope, dataService) {
dataService.then(function (data) {
$scope.data = data
})
});
app.controller('SecondCtrl', function($scope, dataService) {
dataService.then(function (data) {
$scope.secData = data
})
});
app.service('dataService', function ($http, $q){
var defferer = $q.defer()
$http.jsonp('http://ip.jsontest.com/?callback=JSON_CALLBACK').success(function (data){
defferer.resolve(data)
})
return defferer.promise
})