我有这项服务:
monApp.service('serviceEtatConnexion', function ($http) {
this.getEtatConnexion = function () {
return $http.get('backend/backend.php?action=get_etat_connexion');
};
});
后端php在直接调用时返回此值:
{"statuslogin":1}
在我的angularjs路由中,我想让这个值测试这个值:
resolve:{
"check":function($window,serviceEtatConnexion,$location){
var u = serviceEtatConnexion.getEtatConnexion();
console.log('u est egal a ' +u);
console.log(u.$$state.statuslogin);
alert(JSON.stringify(u, null, 4));
/* if( u!= '{"$$state":{"status":0}}' ){
alert("ok");
}else{
alert("Vous devez vous identifier pour utiliser cette partie");
$window.location.href ='http://liseo.lan/dev/login.phtml?mlog=&domain=stuff';
} */
}
}
绝对没有办法获得statuslogin json值,看看我尝试过的所有内容。我总是在控制台内看到“未定义” 我不明白为什么。
有关信息,这是我的php函数,正确编码json:
function get_etat_connexion(){
session_start();
include_once( "../../../globprefs.php" );
include_once( "../../../manage_session.php" );
$http_form_vars = count( $_POST ) > 0 ? $_POST :
( count($_GET) > 0 ? $_GET : array("") );
if(USER&PASSWORD){
$reponse['statuslogin']=1;
echo(json_encode($reponse));
}
else{
$reponse['statuslogin']=0;
echo(json_encode($reponse));
}
}
即使这不起作用也会返回undefined:
var statuslogin = $ http.get('backend / backend.php?action = get_etat_connexion'); console.log('statuslogin est egal a'+ statuslogin);
答案 0 :(得分:1)
$http
服务返回promises,这意味着只是调用函数不会返回任何内容,因为promise还没有解决。请看下面的代码段
resolve:{
"check":function($window,serviceEtatConnexion,$location, $q) {
var deferred = $q.defer();
serviceEtatConnexion.getEtatConnexion()
.then(function(result) {
if (result.statusLogin === 1) {
// Everything is okay, resolve the promise with the result
deferred.resolve(result);
} else {
// Something went wrong, not logged in. Reject the promise
deferred.reject(result);
}
});
return deferred.promise;
}
}
然后,您可以在if
语句中添加任何代码来处理错误。一个常见的惯例是侦听$stateChangeError
事件并处理该侦听器中的重定向等。
答案 1 :(得分:0)
您正在获取undefined
,因为您要将变量u
分配给$http
服务创建的承诺(最终会得到解决)。您真正想要的是等待该承诺得到解决,并将变量u
设置为promise的成功回调返回的响应。修复
变化:
var u = serviceEtatConnexion.getEtatConnexion();
要:
var u = null;
serviceEtatConnexion.getEtatConnexion()
.then(function(response){
u = response.data;
});
现在u
应该等于{"statuslogin":1}
。