【发布时间】:2015-11-03 18:33:16
【问题描述】:
我正在尝试构建一个 Angular 服务,我可以重用它来执行我的 http 请求等。当它不在服务中时,这一切都有效。
以下代码可以正常工作并进行登录,但 $scope.data 的日志始终未定义。如果我在返回数据之前登录成功,它会返回数据,但不会返回到控制器,这是我真正想要做的。
为了澄清起见,我希望能够在我的控制器中成功访问从服务器返回的 json 数据作为“数据”。
//App.js
.service('SaveSubmitService', function ($http, $log) {
this.addItem = function(url, options){
var xsrf = $.param({
Username: options.Username,
Password: options.Password
});
$http({
method: 'POST',
url: url,
data: xsrf,
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
}).success(function(data, status, headers, config) {
return data;
}).
error(function(data, status, headers, config) {
console.log(data);
return false;
});
}
})
控制器:
.controller('LoginCtrl', function ($scope, $stateParams, $location, $ionicLoading, $http, SaveSubmitService, $log) {
if (localStorage.getItem("SessionKey")) {
$location.path('home');
}
$scope.login = {};
$scope.doLogin = function doLogin() {
$scope.data = SaveSubmitService.addItem('http://*****/Services/Account.asmx/Login', $scope.login);
$log.info($scope.data);
};
})
【问题讨论】:
-
我有更好的方法来实现它。
-
它不会工作,因为你的服务没有返回任何东西。
-
你需要等到promise解决
var promise = SaveSubmitService.addItem('http://*****/Services/Account.asmx/Login', $scope.login); promise.then(function(data){$scope.data = data}) -
你不能从 ajax 调用返回,它会返回一个可以用
.then扩展的promise
标签: javascript angularjs