我的一个页面中有一个奇怪的错误。在一个简单的登录中,我使用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)......”等等
答案 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);
}
}
?>