2017-02-22 30 views
0

У меня есть странная ошибка на одной из моих страниц. В простом Login, im используя AJAX, чтобы проверить, существует ли имя пользователя. Это 4-й раз, когда я копирую код, и до сих пор у него не было проблем.AJAX/PHP ajax data/echo, возвращающийся с «?» «

Код работает следующим образом:> при нажатии кнопки он передает данные индексу. Индекс вызывает диспетчер диспетчера для контролера проверки, проверка проверяет имя пользователя и пароль, и если все это нормально, оно возвращает 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; 
     }  
} 
} 

однако, возвращение в конце концов, как этот

"?> Новичок Ошибка у/о contraseña"

сделал простой, если данные == "?> ОК", чтобы подтвердите, но я все еще озадачен, почему это?> добавлено? это не проблема с div, потому что «Cargando ...» появляется без «?>»

Кроме того, я сделал echo var_dump ($ mensaje), а return - «?> string (29) .. . "и т.д.

+2

Вы проверили этот файл 'require_once ($ _SERVER [ 'DOCUMENT_ROOT'] $ s "модель" $ s "usuario.php"....)'? Может быть, вывод '?>' Встречается там? – jrn

+0

usuario.php возвращает только логическое значение или объект «usuario». Так что нет –

+0

Не могли бы вы разместить полный файл? Кроме того, что происходит в 'new usuario();'? Может быть, поделиться этими двумя файлами? – jrn

ответ

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); 
 
} 
 
} 
 

 
?>

+0

Не работает. Кажется, что он застрял в цикле beforeSend. , «cargando ...» всегда находится в div, а session_start() никогда не происходит (в «ошибочном» коде, если вы Realodad, сеанс все еще начался, и он перенаправлен на страницу администратора.) Возможно, это что-то вроде JSON.Json его вид из моей зоны комфорта (никогда не использовал его), поэтому я не испытал достаточно, чтобы поиграть с ним. –

+0

Почему бы вам не вернуть 'ok', когда вы вызываете эту функцию' $ user-> login ($ usuario, $ пароль) '. Вы можете активировать стартовый сеанс в функции '$ user-> login ($ usuario, $ password)' – kikuyu1

+0

в основном для рекомендаций «чистого программного обеспечения». сеансы не в Модели, и подобные вещи. В любом случае, это не очень важно для проблемы, я думаю ... –