hola que tal,
estoy creando una tienda online usando POO en PHP, pero tengo un problema cuando integro ajax y es que como dice el titulo de la pregunta, cuando me llega la respuesta al elemento designado(#stock), me duplica el header y el footer junto con la respuesta. Mi teoría es que el problema ocurre cuando el controlador frontal carga la vista, ya que aparte de cargar la vista el controlador también hace un require_once de el header y el footer y supongo que cuando ajax devuelve la repuesta al elemento designado se vuelve a cargar el header y el footer.
CONTROLADOR FRONTAL
<?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';
function show_error(){
$error = new ErrorController();
$error->index();
}
if (isset($_GET['controller'])) {
$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'])) {
$action = $_GET['action'];
$controlador->$action();
}elseif(!isset($_GET['controller']) && !isset($_GET['action'])){
$action_default = action_default;
$controlador->$action_default();
}else{
show_error();
}
}else{
show_error();
}
require_once 'views/layout/footer.php';
VISTA VER.PHP
<?php if(isset($product)): ?>
<div class="container">
<div class="slideshow-wrapper">
<div class="slider-wrapper">
<div class="inner-wrapper">
<div class="slide">
<?php if($product->imagen != NULL): ?>
<img class="slider-image" src="<?=base_url?>uploads/images/<?=$product->imagen?>">
<?php else: ?>
<img class="slider-image" src="<?=base_url?>assets/img/sin_imagen.png">
<?php endif; ?>
</div>
<div class="slide">
<?php if($product->imagen != NULL): ?>
<img class="slider-image" src="<?=base_url?>uploads/images/<?=$product->imagen2?>">
<?php else: ?>
<img class="slider-image" src="<?=base_url?>assets/img/sin_imagen.png">
<?php endif; ?>
</div>
<div class="slide">
<?php if($product->imagen != NULL): ?>
<img class="slider-image" src="<?=base_url?>uploads/images/<?=$product->imagen3?>">
<?php else: ?>
<img class="slider-image" src="<?=base_url?>assets/img/sin_imagen.png">
<?php endif; ?>
</div>
</div>
<div class="left">
<span class="fas fa-angle-left"></span>
</div>
<div class="right">
<span class="fas fa-angle-right"></span>
</div>
</div>
<div class="data">
<h1><?=$product->nombre?></h1>
<p class="price-product">$<?=$product->precio?></p>
<?php if (!isset($oferta)) : ?>
<h3>NO APLICA DESCUENTO</h3>
<p>Sobre este articulo no se podra aplicar ninguno descuento.</p>
<?php endif; ?>
<form class="form-tallas">
<div id="colour-selection" class="product-variation">
<?php $color = Utils::productoColores(); ?>
<?php while($col = $color->fetch_object()): ?>
<label for="<?=$col->color?>">
<?php if ($col->color == "3" && $product->color == "3") : ?>
<input type="radio" class="radio" id="<?=$col->color?>" name="id_color" value="<?=$product->id?>" checked>
<div class="front-end box">
<span>gr</span>
</div>
<?php elseif ($col->color == "3") : ?>
<input type="radio" class="radio" id="<?=$col->color?>" name="id_color" value="<?=$product->id?>">
<div class="front-end box">
<span>gr</span>
</div>
<?php endif; ?>
<?php if ($col->color == "4" && $product->color == "4") : ?>
<input type="radio" class="radio" id="<?=$col->color?>" name="id_color" value="<?=$product->id?>" checked>
<div class="front-end box">
<span>bl</span>
</div>
<?php elseif ($col->color == "4") : ?>
<input type="radio" class="radio" id="<?=$col->color?>" name="id_color" value="<?=$product->id?>" checked>
<div class="front-end box">
<span>bl</span>
</div>
<?php endif; ?>
</label>
<?php endwhile; ?>
</div>
<div id="size-selection" class="product-variation">
<?php $talla = Utils::productoTallas(); ?>
<?php while($ta = $talla->fetch_object()): ?>
<label for="<?=$ta->talla_id?>">
<input type="radio" class="radio" id="<?=$ta->talla_id?>" name="id_talla" value="<?=$product->id?>">
<div class="front-end box">
<span><?=$ta->tallanombre?></span>
</div>
</label>
<?php endwhile; ?>
</div>
</form>
<p>Selecciona una talla para comprobar si esta disponible.</p>
<?php if (isset($_POST['id_talla'])) : ?>
<p>existe talla.</p>
<?php endif; ?>
<div id="stock"></div>
<button class="btn btn-dark add-button" id="submit">SELECCIONA UNA TALLA</button>
</div>
</div>
<p class="description"><?=$product->descripcion?></p>
</div>
<?php else: ?>
<h1>El producto no existe</h1>
<?php endif; ?>
AJAX
$('#size-selection .radio').unbind('click').click(function(){
var url = 'http://localhost/tienda-poo/';
var id = $(this).val();
var id_size = $(this).attr("id");
$.ajax({
url: url+'/categoria/'+'/comprobarTalla',
type:'POST',
data:{id:id, id_talla:id_size},
success:function(data){
$("#stock").empty().html(data);
}
});
});