2017-02-10 82 views
0

我有了这个服务:不可能得到从服务JSON到angularJs路由

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值,看看我所尝试过的。我总是看到控制台内的“undefined” 我不明白为什么。

对于信息,这是我的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。获得( '后端/ backend.php行动= get_etat_connexion?'); console.log('statuslogin estalal a'+ statuslogin);

回答

1

$http服务返回承诺这意味着只是调用该函数将不会返回任何内容,因为承诺尚未解决。看看下面的代码片段

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事件并处理该侦听器中的重定向等。

+0

是的,终于没有工作,当人没有登录,我想你的解决方案 – user7370387

+0

它终于正常工作,非常感谢你,只是改为if(result.data.statuslogin === 1) – user7370387

0

您得到undefined,因为您将变量u分配给由$http服务创建的承诺(最终得到解决)。您真正想要的是等待该承诺解决,并将变量u分配给承诺成功回调返回的响应。要解决

变化:

var u = serviceEtatConnexion.getEtatConnexion(); 

要:

var u = null; 
serviceEtatConnexion.getEtatConnexion() 
    .then(function(response){ 
     u = response.data; 
    }); 

现在u应等于{"statuslogin":1}

+1

谢谢你的工作! – user7370387