如何从视图重定向到另一个视图

时间:2017-05-30 09:40:17

标签: php angularjs ionic-framework

我尝试使用angualrJS和php进行身份验证。我通过console.log测试了它,当密码不正确时我收到错误信息,当密码正确时我没有得到任何东西,在这种情况下,我想被骑到其他视图,我该怎么办呢:

app.js

app.controller('loginCtrl', function($scope, $location,$state,$http,$window){

    $scope.submit = function()
    {
        data = {
            'NomClient' : $scope.NomClient,
            'mdp' : $scope.mdp
        };

        $http.post('http://localhost/deb/login.php', data)
        .success(function(data, status, headers, config)
        {
          // $window.location.href = '#/admin';
            console.log(data);
        })
        .error(function(data, status, headers, config)
        {
            console.log('error');
        });
    }

});

的login.php

 <?php  

$data = json_decode(file_get_contents("php://input"));

 $connect = mysqli_connect("localhost", "root", "", "test");  


 if(count($data) > 0)  
 { 
$NomClient=mysqli_real_escape_string($connect, $data->NomClient);
$mdp=mysqli_real_escape_string($connect, $data->mdp);


$query = 'SELECT * FROM `client` WHERE NomClient = "'.$NomClient.'" AND   mdp= "'.$mdp.'"';

$q = mysqli_query($connect , $query);

if(mysqli_num_rows($q) > 0 )
        { 
            $_SESSION["logged_in"] = true; 
            $_SESSION["naam"] = $NomClient; 
        }
        else
        {
            echo 'The username or password are incorrect!';
        }

}
 ?>

如您所见,我在app.js中有一个评论行:// $ window.location.href ='#/ admin';我把它作为评论,因为当我把它,它重定向到管理员视图,但密码不正确。

提前致谢

6 个答案:

答案 0 :(得分:0)

使用AngularJS,您可以使用$location服务

$Location - Documentation

尝试使用:

$location.path("your new path here")

举个例子:请参考另一篇文章的以下答案:

https://stackoverflow.com/a/14387747/7018180

答案 1 :(得分:0)

.success是$ http服务的一个属性,所以如果数据变量中有一些值,那么$ window.location最终会被调用..所以为了改善你可以在$ http服务中使用if条件检查传递的用户名和密码以及从服务获得的响应,然后在if条件下将其重定向到另一个页面。

app.service('AuthenticationService', function ($http, $window){
    this.login = function (username, password) {
        return $http({
            url: 'http://localhost/deb/login.php',
            method: 'POST',
            params: {
                NomClient : username,
                mdp : password
            }
        })
    };
});

app.controller('loginCtrl', function ($scope, $state, $http, $window, AuthenticationService, $remember) {
    $scope.submit = function()
    {
        AuthenticationService.login($scope.NomClient,$scope.mdp)
        .then(function(response) {
            if (response.data.NomClient == $scope.NomClient && response.data.mdp == $scope.mdp) 
            {
                $state.go('application.home');
            }
            else {
                alert('Credentials do not match our records. Please try again.');
            }
        })
    }
});

而不是$ window.location你可以使用angularJS的$ state.go功能。它会将您的页面重定向到将要提到的特定状态,它将在路径文件中查找该状态,并将与其templateUrl和控制器一起执行该状态。

答案 2 :(得分:0)

在login.php中尝试此代码

if(mysqli_num_rows($q) > 0 )
  { 
       $_SESSION["logged_in"] = true; 
       $_SESSION["naam"] = $NomClient; 
       $result['code'] = 200;
       $result['message'] ='Logged In';
  }
  else
  {

       $result['code'] = 603;
       $result['message'] ='The username or password are incorrect!';
  }

$resultstring = json_encode($result);
$resultstring = str_replace("null",'""',$resultstring);
echo $resultstring ;
die;

并检查js中的结果代码(如果它是200)那么它将在其他方面成功地出错。

答案 3 :(得分:0)

.success\.error更改为.then(),将代码更改为:

   $http.post('http://localhost/deb/login.php', data).then(function(response) {          
            console.log(response.data);
            $window.location.href = '#/admin';
          }, function(error) {
            console.log('error');
     });

答案 4 :(得分:0)

这里正确运行的代码可以正确测试您的问题。如果你还在寻找解决方案

app.js

ZoneId.of("Asia/Hong_Kong")


login.php中
        

ZoneId.systemDefault()


的login.html

app.controller('loginCtrl', function ($scope, $http,$state) {
    $scope.submit = function ()
    {
        $scope.data = {
            username: $scope.username,
            password: $scope.password
        }

        $http.post('http://localhost/HTML5Application/public_html/login.php', {serviceData: $scope.data})
                .success(function (data) {
                    alert(data);
                    $state.go('newState');
                })
                .error(function (data) {
                    alert("problem with service call");
                });
    };
});

答案 5 :(得分:0)

谢谢大家,这是这个问题的解决方案,由“Mr_Perfect”解决: 我们只是在suceess中添加一个条件:

$http.post('http://localhost/deb/login.php', data)
        .success(function(data, status, headers, config,result)
        {

            console.log(data);
            if(data.code == 200){
            $state.go('admin');
          }
        })
        .error(function(data, status, headers, config, rsult)
        {

            console.log('error');

        });

谢谢大家