无法从服务中获取JSON到angularJs路由

时间:2017-02-10 09:34:14

标签: javascript php angularjs json

我有这项服务:

 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);

2 个答案:

答案 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}