Question:
Date: 05-04-2020 18:20:56
(In Spanish)
Estas son unas capturas de pantalla de el problema antes de realizar la validación en ajax.:
y cuando escribo un correo que ya existe en la bd me lo valida bien pero al validarlo agrega el header y footer así como se muestra en la imagen siguiente:
El resultado de la petición ajax la muestro en este div que dentro del formulario de registro d eusuario: <div id="validacion_email"></div>
Esta esta es la estructura de mi ventana modal:
en donde imprimo la respuesta en un :
tengo este archivo que contiene la petición ajax, que recibe los parámetros y los envía a el controlador de usuarios:
Posterior mente es recibido en el controlador el cual tiene esta estructura:
Después el controlador envía el email a el modelo de usuarios el cual tiene esta estructura:
El en el index ya incluyo el header y el footer no se que puede estar sucediendo el porque me repite el header y footer la estructura de el index.php es esta:
ya están incluidos el footer y header, no se por que me repite la cabecera espero me orienten soy algo nuevo en php apenas estoy comenzando con ajax y php ya que anterior mente solo hacia paginas que se refresacban para mostrar los datos, saludos. Uso MVC Votes: 0 - Answers: 1 - Views: 9 Share on: Google Facebook Twitter LinkedIn Link
ajax duplica header y footer usando MVC y php[Unresolved]
Hola,tengo un problema en el momento de mostrar el resultado de una petición Ajax en un div con su id, estoy usando mvc, y cuando valido si un correo esta ya en mi base de datos me muestra bien la validación, el problema es que me agrega el header y footer de mi sistema en el formulario, espero me orienten saludos.Estas son unas capturas de pantalla de el problema antes de realizar la validación en ajax.:
y cuando escribo un correo que ya existe en la bd me lo valida bien pero al validarlo agrega el header y footer así como se muestra en la imagen siguiente:
El resultado de la petición ajax la muestro en este div que dentro del formulario de registro d eusuario: <div id="validacion_email"></div>
Esta esta es la estructura de mi ventana modal:
<div class="modal fade" id="ModalRegistro" role="dialog"> <div class="modal-content modal-dialog "> <div class="register-box"> <div class="register-logo mt-2 "> <center><h1>Registrarse</h1><center> </div> <div class="card"> <div class="card-body register-card-body"> <p class="login-box-msg">Registrate como nuevo miembro</p> <form action="<?=base_url?>Usuario/guardarUsuario" onsubmit="return registroUsuario();" method="post"> <div class="input-group mb-3"> <input type="text" id="regUsuario" name="usNombre" class="form-control" placeholder="Nombre Completo" maxlength="45" required> <div class="input-group-append"> <span class="fa fa-user input-group-text"></span> </div> </div> <div class="input-group mb-3"> <input type="email" id="regEmail" name="usEmail" class="form-control" placeholder="Email" required> <div class="input-group-append"> <span class="fa fa-envelope input-group-text"></span> </div> <div id="validacion_email"> </div> </div> <div class="input-group mb-3"> <input type="password" id="regPassword" name="regPassword" class="form-control" placeholder="Password" maxlength="8" required> <div class="input-group-append"> <span class="fa fa-lock input-group-text"></span> </div> </div> <div class="input-group mb-3"> <input type="password" id="confirmPassword" name="confirmPassword" class="form-control" placeholder="Repite password" maxlength="8" required> <div class="input-group-append"> <span class="fa fa-lock input-group-text"></span> </div> </div> <div class="row"> <div class="col-8"> <div class="checkbox icheck"> <label> <input id="terminos" type="checkbox"> Acepto <a href="#">terminos y condiciones</a> </label> </div> </div> <!-- /.col --> <div class="col-4"> <button type="submit" class="btn btn-primary btn-block btn-flat">Listo!</button> </div> <!-- /.col --> </div> </form> <div class="social-auth-links text-center"> <p>- Registrate con tu perfil -</p> <a href="#" class="btn btn-block btn-primary"> <i class="fa fa-facebook mr-2"></i> Regístrate usando Facebook </a> <a href="#" class="btn btn-block btn-danger"> <i class="fa fa-google-plus mr-2"></i> Regístrate usando Google+ </a> </div> ¿Ya tienes una cuenta? <a href="login.html" class="text-center">Iniciar sesión</a> </div> <!-- /.form-box --> </div><!-- /.card --> </div> <!-- /.register-box --> </div> </div>
en donde imprimo la respuesta en un :
<div id="validacion_email"></div>
tengo este archivo que contiene la petición ajax, que recibe los parámetros y los envía a el controlador de usuarios:
$('#regEmail').change(function(){ $.post('<?=base_url;?>Usuario/valida_email_usuario',{ email:$('#regEmail').val(), beforeSend:function(){ $('#validacion_email').html("Validando email..."); } },function(respuesta){ $('#validacion_email').html(respuesta); });
Posterior mente es recibido en el controlador el cual tiene esta estructura:
public function valida_email_usuario(){ if (isset($_POST)) { // code... $emailUser=$_POST['email']; $usuario = new Usuario(); $usuario->setUserEmail($emailUser); $validado=$usuario->valida_email(); if ($validado) { // code... echo "<label style='color:green'>Es valido!</label>"; }else { echo "<label style='color:red'>El email ya esta registrado</label>"; } } }
Después el controlador envía el email a el modelo de usuarios el cual tiene esta estructura:
public function valida_email(){ $sql = "SELECT user_email FROM usuarios WHERE user_email = '{$this->user_email}'"; $valida = $this->db->query($sql); $result=false; if($valida->num_rows!=1) { $result= true; } return $result; }
El en el index ya incluyo el header y el footer no se que puede estar sucediendo el porque me repite el header y footer la estructura de el index.php es esta:
<?php session_start(); require_once 'autoload.php'; require_once 'config/db.php'; require_once 'config/parameters.php'; require_once 'helpers/utils.php'; require_once 'views/layout/header.php'; require_once "views/carrito/index.php"; // function that show a error when the sistem Don´t work function show_error(){ $error = new ErrorController(); $error->index(); } // I am validating that controller has data if (isset($_GET['controller'])) { // code... $nombre_controlador = $_GET['controller'].'Controller'; // }elseif(!isset($_GET['controller']) && !isset($_GET['action'])){ $nombre_controlador = controller_default; }else { show_error(); exit; } // if(class_exists($nombre_controlador)){ $controlador = new $nombre_controlador(); if (isset($_GET['action']) && method_exists($controlador,$_GET['action'])) { // code... $action = $_GET['action']; $controlador->$action(); }elseif(!isset($_GET['controller']) && !isset($_GET['action'])) { // code... $action_default = action_default; $controlador->$action_default(); }else { show_error(); } }else { // code... show_error(); } require_once 'views/layout/footer.php'; require_once 'assets/js/ajax.php'; require_once 'assets/js/usuarios/ajax_usuario.php';
ya están incluidos el footer y header, no se por que me repite la cabecera espero me orienten soy algo nuevo en php apenas estoy comenzando con ajax y php ya que anterior mente solo hacia paginas que se refresacban para mostrar los datos, saludos. Uso MVC Votes: 0 - Answers: 1 - Views: 9 Share on: Google Facebook Twitter LinkedIn Link
Answers:
-
Date: 06-04-2020 10:16:34 Hola Gabo,
Dos cosas:
1. La respuesta es correcta, el problema es que el controlador utiliza la plantilla por defecto si no le especificas una. Lo que lleva al segundo punto:
2. Una respuesta AJAX por lo general no debe contener elementos de estilo, solo deberían ser datos en formato JSON (o XML). Esto evita generar dependencias innecesarias entre el frontend y el backend.
Tienes dos caminos a seguir:
1. Indicar a tu controlador que no utilice la plantilla por defecto o
2. Refactorizar tu código para que regreses un JSON y el frontend se haga 100% cargo de construir y desplegar el mensaje.
Espero esto te sirva.
Saludos Votes: 0 - Link answer
To actively participate in the community first must authenticate, enter the system.Sign In