Lo siento, no había visto la opción de highlight!
Muchas gracias por las sugerencias. No me han funcionado. Es muy raro porque aparentemente debería funcionar y como digo, si pongo un breakpoint con el FireBug en la línea
if(pagina.readyState==4 && pagina.status==200) de la función compruebaLogin() y ejecuto paso a paso, todo funciona bien. Pero si lo pongo en la línea siguiente
var respuesta = pagina.responseText.evalJSON(); y doy al play para que se pare ahí, ya no se para y deja de funcionar. Es como si la llamada Ajax no funcionase bien.
Vuelvo a poner el código con highlight:
Formulario de login:
Código HTML:
Ver original<form id="formLogin" name="formLogin" onsubmit="return validaLogin()" method="POST" action="pagina2.php"> <input name="usuario" type="text" size="30" focused autocomplete /> <div id="error-usuario"></div> <input name="password" type="password" size="10" focused /> <div id="error-password"></div>
<input class="botonenviar" name="entrar" type="submit" value="Entrar" class="enviar" /> <input type="checkbox" name="recordarPass" value="recordarPass" /><label>  Recordar contraseña </label> </fieldset>
</form>
Función Javascript validaLogin:
Código Javascript
:
Ver originalfunction validaLogin() {
if(compruebaLogin()){
return true;
}
else{
return false;
}
}
function compruebaLogin() {
//Se recuperan los inputs del formulario
var usuario = document.formLogin.usuario.value;
var password = document.formLogin.password.value;
var recordarPass = document.formLogin.recordarPass.checked;
var pagina = false;
if(window.XMLHttpRequest()){
pagina = new XMLHttpRequest();
}else {
if(window.ActiveXObject()) {
try {
pagina = new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
try{
pagina = new ActiveXObject("Microsoft.XMLHTTP");
}catch(e){}
}
}else{
return false;
}
}
pagina.onreadystatechange=function(){
if(pagina.readyState==4 && pagina.status==200){
var respuesta = pagina.responseText.evalJSON();
if(respuesta.error_usuario == "" && respuesta.error_password == "") {
return true;
} else {
document.getElementById('error-usuario').innerHTML=respuesta.error_usuario;
document.getElementById('error-password').innerHTML=respuesta.error_password;
return false;
}
}
}
var params = "usuario="+usuario+"&password="+password+"&checkbox="+recordarPass;
pagina.open("POST","../lib/controller/validaUsuario.php",true);
pagina.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
pagina.setRequestHeader("Content-length", params.length);
pagina.setRequestHeader("Connection", "close");
pagina.send(params);
}
Archivo php validaUsuario.php:
Código PHP:
Ver original $password=trim($_POST['password']);
$ent_usuario = new Usuario(); //entidad con los atributos de la tabla Usuario
$usuarioDAO = new UsuarioDAO(); //DAO para gestionar los accesos a la tabla Usuario
//La función compruebaLogin accede a la tabla usuario y devuelve el usuario 'nickname' o una entidad usuario vacía si no existe
$ent_usuario = $usuarioDAO->compruebaLogin($nickname, $password);
$error_usuario="";
$error_password="";
if($ent_usuario->nickname=="") {
$error_usuario = 'Usuario no existe. Regístrate <a href="#">aquí!</a>';
} else {
if($ent_usuario->password != $password) {
$error_password = 'Contraseña incorrecta';
}
}
$return = array("error_usuario" => $error_usuario, "error_password" => $error_password);