Código Javascript :

var content;
var id;
var nombre;
var marca;
var precio;
$(document).ready(function() {
listar();
var nombreBusqueda;

 $("#nombre").keyup(function() {
            
        nombreBusqueda=$("#nombre").val();
        filtrar(nombreBusqueda);
    }
);
  var id;
  var nombre;
  var marca;
  var producto;
    var precio;
// Detectar clic en una fila
$("#resultado tbody").click(function(event) {
  $("tr").click(function(event) {
 id = $(this).find("td:first-child").text();
 nombre = $(this).children('td').eq(1).text();
 marca = $(this).children('td').eq(2).text();
 precio = $(this).children('td').eq(4).text();
 producto = nombre + "  " +  marca;
$("#nombreselec").val(producto);

});
 
});
$("#Agregar").click(function(event){
  var cantidad=$("#CANTIDAD").val(); 
  if (cantidad!==""){
    var accion = "agregar";
    $.ajax({
     
            type: "POST",
            url: "../gestionweb/includes/php/procesoDetalle.php",
            data: {"accion":accion,"id":id,"cantidad":cantidad,"nombre":nombre,"marca":marca,"precio":precio}, 
            
  dataType:'html',
            error: function(){
                alert("error petición ajax");
            },
            success: function(data){
               console.log(data);
                      
            }
        }).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);

  }

});

    
  } else{
    alert("ingrese cantidad");
  }
});

});


function filtrar(dato){
        var filtrado=[];
        var existe;
    for(var i = 0; i < content.length; i++) {
    if (content[i].nombre.toLowerCase().indexOf(dato.toLowerCase())!=-1) {
        filtrado.push(content[i]);
        
       
    }
}
     if (filtrado.length>0) {
        
      $("#resultado tbody").empty();
        
            for (var i = 0; i < filtrado.length; i++) {
          
                var newRow =
                    "<tr>" +
                    "<td>" + filtrado[i].idproducto + "</td>" +
                    "<td>" + filtrado[i].nombre + "</td>" +
                    "<td>" + filtrado[i].marca + "</td>" +
                    "<td>" + filtrado[i].categoria + "</td>" +
                    "<td>" + filtrado[i].precio + "</td>" +
                    "<td><input type='radio' id='"+filtrado[i].idproducto+"' name='seleccion'/></td>"+
                    "</tr>";
                  
                $(newRow).appendTo("#resultado tbody");                 
       }
 
   
  
}};
function listar(){

    tipofiltro="todos";
    $.ajax({
     
            type: "POST",
            url: "../gestionweb/includes/php/filtroP.php",
            data: { "tf": tipofiltro}, 
            dataType: "json",
            error: function(){
                alert("error petición ajax");
            },
            success: function(data){
           content=data;
               for (var i = 0; i < data.length; i++) {
          
                var newRow =
                    "<tr>" +
                    "<td>" + data[i].idproducto + "</td>" +
                    "<td>" + data[i].nombre + "</td>" +
                    "<td>" + data[i].marca + "</td>" +
                    "<td>" + data[i].categoria + "</td>" +
                    "<td>" + data[i].precio + "</td>" +
                    "<td><input type='radio' id='"+data[i].idproducto+"' name='seleccion'/></td>"+
                    "</tr>";
                $(newRow).appendTo("#resultado tbody");                 
       
    
               
            }
        
  

        }  
});
};
  



Con el codigo de arriba tengo el boton agregar que añade un producto al ticket o carro de compras.

Luego en procesodetalle.php tengo:

Código PHP :

<?php
session_start();

require ("../../models/claseTicket.php");


    if (isset($_POST['accion'])){
   if ($_POST['accion']=="listar"){

    if(isset($_SESSION['carrito'])){
             $carrito = $_SESSION['carrito'];
               
             echo json_encode($carrito);
                     
        }else{
         
      $carrito = array();
      echo json_encode($carrito);
        }
        
    
    
   }else if ($_POST['accion']=="agregar"){
        $id = $_POST['id'];
        $pu = $_POST['precio'];
        $cant = $_POST['cantidad'];
        $nom = $_POST['nombre'];
        $detalle = new detalleTicket($id,$pu,$cant,$nom);
    
        
 
        
        if(isset($_SESSION['carrito'])){
            $carrito = $_SESSION['carrito'];
        } else {
            $carrito = array();
        }
        var_dump($carrito);
                array_push($carrito, $detalle);
      
        $_SESSION['carrito'] = $carrito;
        
    }
    
  
   
}   


?>


Pero me muestra undefined en las filas de la tabla de factura.
La verdad no se que puede ser.