AJAX / PHP ajax数据/ echo以“?>”返回

时间:2017-02-22 20:24:42

标签: javascript php jquery ajax

我的一个页面中有一个奇怪的错误。在一个简单的登录中,我使用AJAX检查用户名是否存在。这是我第四次复制代码,直到现在都没有问题。

代码就像这样工作 - >单击按钮,它将数据传递给索引。索引将调度程序Controller调用到Validation控制器,Validation检查用户名和密码,如果一切正常,则返回ok。

然而,返回时带有'?>'加入了开始。喜欢它从PHP逃脱。 该字符在Dispacther,ValidationControler,index中没有任何地方,所以它没有从那里添加。我用简单的回声返回数据,

按钮javascript

<script type="text/javascript">
$(document).on("ready",function(){
$("#btn-enviar").click(function(e){
e.preventDefault();
var pet = $("form").attr("action"); //pagina url  modificable?
var met = $("form").attr("method"); //post?
  $.ajax({
   url: "index.php?ctrl=validation&action=login",
  type: met,
  data: $("form").serialize(),
   beforeSend: function () {
                $("#resultado").html("Cargando...");    
    },
    success: function(data){    
     if(data=="ok")
     {
      $("#resultado").html(""+data);
     }
     else
     {
       $("#resultado").html(""+data);
     }
   },

  });
});
});
</script>

被调用的验证控制器

 class validationController {

 public static function login(){
    $s=DIRECTORY_SEPARATOR;
    if(!class_exists("promocion")){
        require_once ($_SERVER['DOCUMENT_ROOT'].$s."model".$s."usuario.php");
    }

    $usuario=$_POST['username'];
    $password=$_POST['password'];
    $user = new usuario();
    $mensaje="Error usuario y/o contraseña";

    //se necesita el mensaje dado que es una funcion por AJAX 
    if($user->login($usuario, $password)){
        session_start();
        $_SESSION['username'] = $usuario;
        $mensaje="ok";
        echo $mensaje;
    }else{

        echo $mensaje;
    }
    sleep(1);
 }
}

从usuario.php类登录的方法

function login($username,$password){
    if(!class_exists("userHelper")){
        require_once ("userHelper.php");
    }
    $helper=userHelper::getInstance();
    $user=$helper->login($username,$password);
    if($user==null){
        return false;
    }else{
        $this->correo=$user->correo;
        $this->id_usuario=$user->id_usuario;
        $this->password=$user->password;
        $this->privilegios=$user->privilegios;
        $this->username=$user->username;
        $this->telefono=$user->telefono;
        $this->direccion=$user->direccion;
        return true;
    }
}

和登录的userHelper.php数据库连接。

public function login($username,$password){
$pdo_options[PDO::ATTR_ERRMODE]=PDO::ERRMODE_EXCEPTION;  ///username, Pass, DB
$conn= new PDO($this->connection,$this->admin,$this->pass,$pdo_options);
$conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$stmt=$conn->prepare("SELECT * FROM `usuario` where username = :usuario and password= :password ");
$stmt->bindParam(':usuario',$username);
$stmt->bindParam(':password',$password);
$stmt->execute();
$result=$stmt->fetchAll();
if ($result==FALSE){
        return null;
}else{
        $u=new usuario();
        foreach($result as $row){
            $u->setCorreo($row['correo']);
            $u->setId($row['id_usuario']);
            $u->setPassword($row['password']);

            $u->setUsuario($row['username']);
            $u->setDireccion($row['direccion']);
            $u->setTelefono($row['telefono']);
        return $u;
        }       
}
}

然而,回报最终会像这样

  

“?&gt;错误usuario y /ocontraseña”

做了一个简单的if data ==“?&gt; ok”来验证,但我仍然感到困惑,为什么呢?&gt;加了?这不是div的问题,因为“Cargando ......”没有出现“?&gt;”

另外,我做了一个echo var_dump($ mensaje),返回的是“?&gt; string(29)......”等等

1 个答案:

答案 0 :(得分:1)

尝试这样

<script type="text/javascript">
$(document).on("ready",function(){
$("#btn-enviar").click(function(e){
e.preventDefault();
var pet = $("form").attr("action"); //pagina url  modificable?
var met = $("form").attr("method"); //post?
  $.ajax({
   url: "index.php?ctrl=validation&action=login",
  type: met,
  data: $("form").serialize(),
   beforeSend: function () {
                $("#resultado").html("Cargando...");    
    },
    success: function(data){    
     if(data.message == 'ok')
     {
       output = data.message;
      $("#resultado").html(""+output);
     }
     else
     {
     output = data.message;
       $("#resultado").html(""+output);
     }
   },

  });
});
});
</script>

并在您的控制器中

<?php
public static function login(){
    $s=DIRECTORY_SEPARATOR;
    if(!class_exists("promocion")){
        require_once ($_SERVER['DOCUMENT_ROOT'].$s."model".$s."usuario.php");
    }

    $usuario=$_POST['username'];
    $password=$_POST['password'];
    $user = new usuario();
    $mensaje="Error usuario y/o contraseña";

    //se necesita el mensaje dado que es una funcion por AJAX 
    if($user->login($usuario, $password)){
        session_start();
        $_SESSION['username'] = $usuario;
        $mensaje="ok";
        $output = json_encode(array('message' => $mensaje));
            die($output);
    }else{

        $output = json_encode(array('message' => $mensaje));
            die($output);
    }
    sleep(1);
 }
}

?>