Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/04/2013, 14:37
socrabonit
 
Fecha de Ingreso: abril-2013
Ubicación: Madrid
Mensajes: 4
Antigüedad: 11 años, 11 meses
Puntos: 0
Pregunta JSON, clases y Arrays, ¿mala combinación?

Saludos.

Llevo unas semanas estudiando PHP, y estoy empezando con las clases (objetos), pero estoy teniendo problemas al combinar clases JSON y arrays, pero antes de nada voy a aclararlo:

La página que estoy haciendo simula ser una página de venta de ropa, calzado y complementos de prueba.

El esquema sería algo así:
  • Página principal donde se incluyen los enlaces a jquery.js(con librerías jquery), js1.js (que contiene los scripts) y clases.php(donde está la clase para manejar los productos).
    En la página hay un "combo" que permite seleccionar la categoría de los productos (calzado, ropa, accesorios), y debajo el listado de productos.
  • clases.php Donde está la clase, la cual contiene un array con los productos y sus características, así como una función que muestra los productos filtrando por categoría, o en caso de no haber filtro, muestra todos.
  • ajax.php Aquí se cogerá la categoría que pasemos por POST desde la página principal, y devolverá el listado de productos en función de la categoría seleccionada en el combo
  • js.js scripts, entre los que está en que mediante ajax (Json) mandará a ajax.php la categoría sacada del combo, cuando éste cambie ( .change() )

Ahora pongo como tengo la clase y el array que hay en el:
Código PHP:
    class listado_productos{
        
        public function 
__construct() {
            
$this -> productos[] = array(1,"Zapato",1);
            
$this -> productos[] = array(2,"Zapatilla",1);
            
$this -> productos[] = array(3,"Bota",1);
            
$this -> productos[] = array(4,"Falda",2);
            
$this -> productos[] = array(5,"Pantalón",2);
            
$this -> productos[] = array(6,"Camisa",2);
            
$this -> productos[] = array(7,"Bolso",3);
            
$this -> productos[] = array(8,"Pulsera",3);
        }

        function 
mostrar($categoria 0){
            
$lista "";
            if (
$categoria==0){
            
                for(
$i $i count($this -> productos[0]) ; $i++){
                    
$lista .= "<li>".$this -> productos[$i][1]."</li>";
                }
                echo 
"<ul>".$lista."</ul>";
            }
            else{
                for(
$i $i count($this -> productos[0]) ; $i++){
                    if (
$catgegoria == $this -> productos[$i][2]){
                        
$lista .= "<li>".$this -> productos[$i][1]."</li>";
                    }
                }
                echo 
"<ul>".$lista."</ul>";
            }
        }
    } 
Si llamo a la clase desde la página principal , se muestra correctamente el listado de productos, y lo mismo si meto el parámetro de la categoría.

el problema viene cuando intento hacer el filtro al cambiar de categoría en el combo.

el js.js sería así:
Código PHP:
$(document).ready(function(){
    $(
"#filtro").change(function(){
        $.
post("ajax.php?lista=filtro",{ categoria:$("#filtro").val()},function(datos){
            $(
"#productos").html(datos));
        },
"json");
    });
}); 
y el ajax.php:
Código PHP:
include "clases.php";
    
$vr $_GET["lista"];
    
$categoria $_POST["categoria"];
    switch (
$vr){
        case 
"filtro":
            
$filtro = new listado();
            
$filtrado $filtro -> mostrar($categoria);
            echo 
json_encode($filtrado);
        break;
    } 
El caso es que en el firebug me pone que envío bien los datos al ajax.php, pero de ahí no vuelve a la página principal.

Inlcuso he probado a poner literalmente:
Código PHP:
include "clases.php";
    
$vr $_GET["lista"];
    
$categoria $_POST["categoria"];
    switch (
$vr){
        case 
"filtro":
            echo 
json_encode("prueba");
        break;
    } 
y tampoco funcionaba.

En cambio quitando el include si:
Código PHP:
    $vr $_GET["lista"];
    
$categoria $_POST["categoria"];
    switch (
$vr){
        case 
"filtro":
            echo 
json_encode("prueba");
        break;
    } 
De lo que deduzco que igual hay alguna incompatibilidad entre las clases y json. ¿Alguien podría decirme que puedo hacer?, o ¿qué hago mal?