Javascript 如何将POST请求的结果存储在另一个控制器的IONAL和Angular中
好吧,这是我第一次尝试使用承诺,所以请容忍我。这个问题建立在我的问题之上。本质上,我正在进行基本的用户身份验证,我创建了一个服务,向数据库发出post请求,以确认输入了有效的登录信息。我想做的是将POST请求的响应存储在一个数组中,稍后我可以在我的配置文件页面中访问该数组,以便显示用户的信息。但我很难将承诺存储在变量中,而不会在控制器中弄乱结果(不会打印成功) controller.jsJavascript 如何将POST请求的结果存储在另一个控制器的IONAL和Angular中,javascript,angularjs,ionic-framework,Javascript,Angularjs,Ionic Framework,好吧,这是我第一次尝试使用承诺,所以请容忍我。这个问题建立在我的问题之上。本质上,我正在进行基本的用户身份验证,我创建了一个服务,向数据库发出post请求,以确认输入了有效的登录信息。我想做的是将POST请求的响应存储在一个数组中,稍后我可以在我的配置文件页面中访问该数组,以便显示用户的信息。但我很难将承诺存储在变量中,而不会在控制器中弄乱结果(不会打印成功) controller.js UserProfile.getProfile(userData).success(function(pro
UserProfile.getProfile(userData).success(function(profile) {
$scope.uProfile = profile;
//invaid input
if ($scope.uProfile == null) {
alert('Invalid Credentials Entered');
//refresh the page
$window.location.reload();
}
else {
var uProfile = $scope.uProfile;
console.log("success");
//console.log(uProfile);
// $state.go('tab.profile',{usrProfile: uProfile}); //Moveto the profile page
}
services.js
.factory('UserProfile',function($http) {
var profileInfo = {};
var profiles = [];
return {
getProfile: function(data) {
console.log("in service");
var url = 'https://cs496-app3.herokuapp.com/api/person/login/';
var obj = {
'email_address': data.email,
'password': data.password
};
$http.post(url, obj)
.then(function(result){
profiles[0] = result;
console.log(profiles[0]);
return profiles[0];
})
// console.log(profiles[0]);
}
};
});
当我将我的服务更改为
return $http.post(url, obj)
一切正常,但随后我无法在另一个控制器中访问帖子的结果。如何存储承诺?用以下代码替换您的services.js
.factory('UserProfile',function($http) {
var profileInfo = {};
var profiles = [];
var getProfile = function(data) {
console.log("in service");
var url = 'https://cs496-app3.herokuapp.com/api/person/login/';
var obj = {
'email_address': data.email,
'password': data.password
};
$http.post(url, obj)
.then(function(result){
profiles[0] = result;
console.log(profiles[0]);
/***********removed and placed below********************/
})
return profiles[0];
// console.log(profiles[0]);
}
return {
getProfile:getProfile
};
});
说明:根据您的代码,您有
$http.post(url, obj)
.then(function(result){
profiles[0] = result;
console.log(profiles[0]);
return profiles[0];
})
return在then函数中,它不是由工厂方法返回的。
默认情况下,angular factory应返回一个承诺。
所以
把它放在http.post之外就行了。
作为一种良好做法,您的实现的格式已更改,但不是强制性的请使用以下代码替换您的services.js
.factory('UserProfile',function($http) {
var profileInfo = {};
var profiles = [];
var getProfile = function(data) {
console.log("in service");
var url = 'https://cs496-app3.herokuapp.com/api/person/login/';
var obj = {
'email_address': data.email,
'password': data.password
};
$http.post(url, obj)
.then(function(result){
profiles[0] = result;
console.log(profiles[0]);
/***********removed and placed below********************/
})
return profiles[0];
// console.log(profiles[0]);
}
return {
getProfile:getProfile
};
});
说明:根据您的代码,您有
$http.post(url, obj)
.then(function(result){
profiles[0] = result;
console.log(profiles[0]);
return profiles[0];
})
return在then函数中,它不是由工厂方法返回的。
默认情况下,angular factory应返回一个承诺。
所以
把它放在http.post之外就行了。
作为一种良好做法,您的实现的格式已更改,但不是强制性的