Обещание AngularJS $ http.post () не возвращает данных

0

это мой первый раз, работая с угловатыми и после большого количества времени, потраченного на онлайн-руководства и руководства, я в конечном итоге застрял в управлении сессиями. Everithing отлично работает, за исключением того, что при входе в систему переменная $_SESSION['uid'] содержит то, что я хочу, но это значение не анализируется обратно в $promise.then(function(response){...}); и поэтому я не могу начать сеанс должным образом. Не могли бы вы дать мне ключ?

Затем последовало следующее: Простая сессия с угловыми и php, angularJs

user.php

<?php 
$json =file_get_contents('php://input');
$user=json_decode($json);  //get user from JSON


if($user->mail=='[email protected]' && $user->pass=='1234') 
    session_start();
    //$_SESSION['uid'] = uniqid('ang_');
    $_SESSION['uid'] = $user->mail;
    return $_SESSION['uid'];           ?>

loginService.js

(function() {
'use strict';
  var app = angular.module('loginS',['sessionS']);

  app.factory('loginService',['$http','$location','sessionService',function($http,$location,sessionService){
    return{
        login:function(data,scope){
            var $promise = $http.post('data/user.php', data);// send data to user.php
            $promise.then(function(response){
                console.log(response);
                var uid = response.data;
                if(uid!=""){
                    //scope.msgtext='Correct information';
                    sessionService.set('uid',uid);
                    $location.path('/home');

                }
                else{
                    scope.msgtext='Wrong information';
                    $location.path('/login');
                } 

            });
        },
        logout:function(){
            sessionService.destroy('uid');
            $location.path('/login');
        },

        isLogged:function(){
            var $checkSessionServer =$http.post('data/check_session.php');
            return $checkSessionServer;
            /*
            if(sessionService.get('user')) return true; 
            else return false;
            */
        }
    }
  }]);
})();

login.tmp.html

<div class="container">
<center>
    <div class="bs-example text-left">
        <form role="form" name="form1" >
            <div class="form-group">
                <p>Welcome : {{user.mail}} : {{user.pass}}</p>
                <label for="exampleInputEmail1">Mail</label>
                <input type="text" placeholder="Enrter name" class="form-control" id="exampleInputEmail1" required ng-model="user.mail"></input>
            </div>
            <div class="form-group">
                <label for="exampleInputPassword1">Password</label>
                <input type="password" placeholder="Password" class="form-control" id="exampleInputPassword1" required ng-model="user.pass"></input>
            </div>
            <button class="btn btn-default" ng-disabled="form1.$invalid" ng-click="login(user)">Submit</button>
            <p>{{msgtext}}</p>
        </form>
    </div>
</center>

Это то, что я получаю от обещания... Я не могу понять, почему...

console.log

Object {data: "", status: 200, config: Object, statusText: "OK"}
Теги:

2 ответа

1
Лучший ответ

return in php не выводит ничего в браузер... вам нужно использовать echo.

кроме того, по умолчанию ожидаемый тип содержимого для $http - json, поэтому я бы изменил:

return $_SESSION['uid']; 

К чему-то вроде:

$output = array('uid'=>$_SESSION['uid']);

echo json_encode($output);

Тогда в угловом:

login:function(data,scope){
        var $promise = $http.post('data/user.php', data);// send data to user.php
        $promise.then(function(response){
            console.log(response);
            var uid = response.data.uid;
            if(uid){
                //scope.msgtext='Correct information';
                sessionService.set('uid',uid);
                $location.path('/home');

            }
            else{
                scope.msgtext='Wrong information';
                $location.path('/login');
            } 

        });
    },
  • 0
    Спасибо, это работает сейчас! Не могли бы вы сказать мне, почему в видеоуроке это работает, хотя?
0

После вашего ответа я пробовал это, потому что я понимаю его лучше, и он тоже работает.

Вместо:

$output = array('uid'=>$_SESSION['uid']);

echo json_encode($output);

Я использовал это:

$_SESSION['uid'] = $user->mail;
echo $_SESSION['uid'];

Итак, в Angular:

login:function(data,scope){
    var $promise = $http.post('data/user.php', data);// send data to user.php
    $promise.then(function(response){
        console.log(response);
        var uid = response.data;
        if(uid!=""){
            //scope.msgtext='Correct information';
            sessionService.set('uid',uid);
            $location.path('/home');

        }
        else{
            scope.msgtext='Wrong information';
            $location.path('/login');
        } 

    });
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню