New question

Question:

 
  0  
 
Date: 05-04-2020 18:20:56 (In Spanish)

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
Tags: AJAX - Error - HTML - HTTP - Javascript - JQuery - PHP - PHP Advanced - PHP PDO - PHP7 - Query - Suggestion 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
 
frjcbbae garagebible.com