我无法在角度js $ http.post中获得响应

时间:2016-09-24 18:20:31

标签: php angularjs

我想检查数据库中是否已存在电子邮件ID。如果电子邮件ID存在,则应返回false,否则为true。我无法得到答复。我已经附加了控制器代码和php代码。 [变量validUser未定义]

Controller.js

signUpApp.controller("signUpCtrl",function($scope,$http){
        $scope.register = function(form,user){
           if (form.$valid)
           {
             $http.post("http://localhost/checkUser.php?email="+user.email)
                  .then(function(response){
                      validUser=response;
                  });
             if(validUser=="true")
             {
               alert("valid user");
             }
             else
             {
               alert("already exists");
             }

           }
        }
     });

checkUser.php

<?php
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");

$conn = new mysqli("localhost", "root", "", "user_details");
//$data = json_decode(file_get_contents("php://input"));
//$email = mysql_real_escape_string($data->email);
$email = $_POST['email'];
$result = $conn->query("SELECT count(*) as count from user where email='$email'");

$outp = "";
$rs = $result->fetch_array(MYSQLI_ASSOC)

    if ($rs['count']==0)
    {
        $outp ="true";
    }
    else
    {
        $outp ="false";
    }
$conn->close();

echo($outp);
?>

2 个答案:

答案 0 :(得分:1)

您没有在正确的位置检查响应,或者更确切地说 - 在正确的时间检查响应。

$http.post立即返回。从服务器返回响应时,将调用.then回调。调用post(您的if语句)后的代码在$http.post返回后立即执行,并在从服务器收到响应之前执行。

您应该将验证码放在回调中:

$http.post(...).then(function(response) {
    validUser = response;
    if(validUser==="true") { 
         ...
    } else if (validUser==="false") {
         ...
    }
}

答案 1 :(得分:0)

你的Date.getTime()语句需要在.then回调中,否则你最终会在ajax请求被响应之前检查它

if