[AngularJS]AngularJS $http.post() 承诺不返回任何数据

标签: PHP AngularJS
发布时间: 2017/4/16 11:18:21
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

这是时间的我第一次工作与角和后大量花在在线教程和我结束了卡住在会话管理的指南。礼物工作的很好只是当我做登录该变量 $_SESSION['uid'] 包含我想要什么,但价值不解析回 $promise.then(function(response){...}); ,所以我不能正确启动会话。 你能给我一个线索吗?

跟着教程︰简单的会话与 angularjs 和 php,angularJs

php 代码

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


if($user->mail=='email@gmail.com' && $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"}

解决方法 1:

return在 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');
            } 

        });
    },
官方微信
官方QQ群
31647020