[英]AJAX/PHP ajax data/echo returning with a “?>”
我在其中一个页面中遇到一个奇怪的错误。 在简单的登录中,我使用AJAX来检查用户名是否存在。 这是我第四次复制代码,到目前为止没有问题。
该代码的工作方式如下->单击按钮,它将数据传递到索引。 索引将调度程序的控制器调用到Validation控制器,Validation检查用户名和密码,如果一切正常,则返回OK。
但是,返回的开头带有“?>”。 就像它从php中逃脱了一样。 该字符在Dispacther,ValidationControler,索引中不存在,因此未从那里添加。 我通过简单的回显返回数据,
按钮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;
}
}
}
然而,回报最终像这样
“?>错误使用u / o相反”
做过一个简单的if data ==“?> ok”来验证,但是我还是很困惑,为什么要添加?>? div没问题,因为出现了“ Cargando ...”而没有“?>”
另外,我做了echo var_dump($ mensaje),返回的是“?> string(29)...”等
像这样尝试
<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); } } ?>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.