giulichajari Seguir
Gamma
Verificación en dos pasos desactivada
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
- Desde
- 12 Feb 2016
- Mensajes
- 151
Tengo este codigo de una clase para un carrito de compras:
Y por la consola del navegador llegan los objetos añadidos pero no muestra nada en pantalla:
Como veran esta accion listar se carga al entrar al ticket, me muestra "data is null"; pero luego cuando agrego pasa asi:
que puede ser?
PHP:
<?php
include_once ($_SERVER['DOCUMENT_ROOT'].'/gestionweb/models/claseTicket.php');
session_start();
class Carrito
{
//aquí guardamos el contenido del carrito
private $carrito = array();
//seteamos el carrito exista o no exista en el constructor
public function __construct()
{
if(!isset($_SESSION["carrito"]))
{
$_SESSION["carrito"] = null;
$this->carrito["precio_total"] = 0;
$this->carrito["articulos_total"] = 0;
}
$this->carrito = $_SESSION['carrito'];
}
//añadimos un producto al carrito
public function add($articulo = array())
{
//primero comprobamos el articulo a añadir, si está vacío o no es un
//array lanzamos una excepción y cortamos la ejecución
if(!is_array($articulo) || empty($articulo))
{
throw new Exception("Error, el articulo no es un array!", 1);
}
//nuestro carro necesita siempre un id producto, cantidad y precio articulo
if(!$articulo["id"] || !$articulo["cantidad"] || !$articulo["precio"])
{
throw new Exception("Error, el articulo debe tener un id, cantidad y precio!", 1);
}
//nuestro carro necesita siempre un id producto, cantidad y precio articulo
if(!is_numeric($articulo["id"]) || !is_numeric($articulo["cantidad"]) || !is_numeric($articulo["precio"]))
{
throw new Exception("Error, el id, cantidad y precio deben ser números!", 1);
}
//debemos crear un identificador único para cada producto
$unique_id = md5($articulo["id"]);
//creamos la id única para el producto
$articulo["unique_id"] = $unique_id;
//si no está vacío el carrito lo recorremos
/* if(!empty($this->carrito))
{
foreach ($this->carrito as $row)
{
//comprobamos si este producto ya estaba en el
//carrito para actualizar el producto o insertar
//un nuevo producto
if($row["unique_id"] === $unique_id)
{
//si ya estaba sumamos la cantidad
$articulo["cantidad"] = $row["cantidad"] + $articulo["cantidad"];
}
}
}*/
//evitamos que nos pongan números negativos y que sólo sean números para cantidad y precio
$articulo["cantidad"] = trim(preg_replace('/([^0-9\.])/i', '', $articulo["cantidad"]));
$articulo["precio"] = trim(preg_replace('/([^0-9\.])/i', '', $articulo["precio"]));
//añadimos un elemento total al array carrito para
//saber el precio total de la suma de este artículo
$articulo["total"] = $articulo["cantidad"] * $articulo["precio"];
//primero debemos eliminar el producto si es que estaba en el carrito
$this->unset_producto($unique_id);
///ahora añadimos el producto al carrito
$_SESSION["carrito"][$unique_id] = $articulo;
//actualizamos el carrito
$this->update_carrito();
//actualizamos el precio total y el número de artículos del carrito
//una vez hemos añadido el producto
$this->update_precio_cantidad();
}
//método que actualiza el precio total y la cantidad
//de productos total del carrito
private function update_precio_cantidad()
{
//seteamos las variables precio y artículos a 0
$precio = 0;
$articulos = 0;
//recorrecmos el contenido del carrito para actualizar
//el precio total y el número de artículos
foreach ($this->carrito as $row)
{
$precio += ($row['precio'] * $row['cantidad']);
$articulos += $row['cantidad'];
}
//asignamos a articulos_total el número de artículos actual
//y al precio el precio actual
$_SESSION['carrito']["articulos_total"] = $articulos;
$_SESSION['carrito']["precio_total"] = $precio;
//refrescamos él contenido del carrito para que quedé actualizado
$this->update_carrito();
}
//método que retorna el precio total del carrito
public function precio_total()
{
//si no está definido el elemento precio_total o no existe el carrito
//el precio total será 0
if(!isset($this->carrito["precio_total"]) || $this->carrito === null)
{
return 0;
}
//si no es númerico lanzamos una excepción porque no es correcto
if(!is_numeric($this->carrito["precio_total"]))
{
throw new Exception("El precio total del carrito debe ser un número", 1);
}
//en otro caso devolvemos el precio total del carrito
return $this->carrito["precio_total"] ? $this->carrito["precio_total"] : 0;
}
//método que retorna el número de artículos del carrito
public function articulos_total()
{
//si no está definido el elemento articulos_total o no existe el carrito
//el número de artículos será de 0
if(!isset($this->carrito["articulos_total"]) || $this->carrito === null)
{
return 0;
}
//si no es númerico lanzamos una excepción porque no es correcto
if(!is_numeric($this->carrito["articulos_total"]))
{
throw new Exception("El número de artículos del carrito debe ser un número", 1);
}
//en otro caso devolvemos el número de artículos del carrito
return $this->carrito["articulos_total"] ? $this->carrito["articulos_total"] : 0;
}
//este método retorna el contenido del carrito
public function get_content()
{
//asignamos el carrito a una variable
$carrito = $this->carrito;
//debemos eliminar del carrito el número de artículos
//y el precio total para poder mostrar bien los artículos
//ya que estos datos los devuelven los métodos
//articulos_total y precio_total
unset($carrito["articulos_total"]);
unset($carrito["precio_total"]);
return $carrito;
}
//método que llamamos al insertar un nuevo producto al
//carrito para eliminarlo si existia, así podemos insertarlo
//de nuevo pero actualizado
private function unset_producto($unique_id)
{
unset($_SESSION["carrito"][$unique_id]);
}
//para eliminar un producto debemos pasar la clave única
//que contiene cada uno de ellos
public function remove_producto($unique_id)
{
//si no existe el carrito
if($this->carrito === null)
{
throw new Exception("El carrito no existe!", 1);
}
//si no existe la id única del producto en el carrito
if(!isset($this->carrito[$unique_id]))
{
throw new Exception("La unique_id $unique_id no existe!", 1);
}
//en otro caso, eliminamos el producto, actualizamos el carrito y
//el precio y cantidad totales del carrito
unset($_SESSION["carrito"][$unique_id]);
$this->update_carrito();
$this->update_precio_cantidad();
return true;
}
//eliminamos el contenido del carrito por completo
public function destroy()
{
unset($_SESSION["carrito"]);
$this->carrito = null;
return true;
}
//actualizamos el contenido del carrito
public function update_carrito()
{
self::__construct();
}
}
$carrito = new Carrito();
if ($_POST['accion']=='listar'){
$c=$carrito->get_content();
echo json_encode($c);
}else if ($_POST['accion']=='agregar'){
$articulo = array(
"id"=>$_POST["id"],
"precio"=>$_POST["precio"],
"cantidad"=>$_POST["cantidad"]
);
$carrito->add($articulo);
}
?>
Y por la consola del navegador llegan los objetos añadidos pero no muestra nada en pantalla:
Insertar CODE, HTML o PHP:
$(document).ready(function() {
listarDetalle();
});
function listarDetalle(){
var accion="listar";
$.ajax({
type: "POST",
url: "//localhost/gestionweb/includes/php/procesoDetalle.php",
data: { "accion":accion},
dataType:'json',
error: function(){
alert("error petición ajax");
},
success: function(data){
console.log(data);
for (var i = 0; i < data.length; i++) {
var newRow =
"<tr>" +
"<td>" + data[i].cantidad + "</td>" +
"<td>" + data[i].id + "</td>" +
"</tr>";
$(newRow).appendTo("#ticket tbody");
} }
}).fail( function( jqXHR, textStatus, errorThrown ) {
if (jqXHR.status === 0) {
alert('Not connect: Verify Network.');
} else if (jqXHR.status == 404) {
alert('Requested page not found [404]');
} else if (jqXHR.status == 500) {
alert('Internal Server Error [500].');
} else if (textStatus === 'parsererror') {
alert('Requested JSON parse failed.');
} else if (textStatus === 'timeout') {
alert('Time out error.');
} else if (textStatus === 'abort') {
alert('Ajax request aborted.');
} else {
alert('Uncaught Error: ' + jqXHR.responseText);
}
});;
};
Como veran esta accion listar se carga al entrar al ticket, me muestra "data is null"; pero luego cuando agrego pasa asi:
que puede ser?