Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/06/2015, 21:03
Avatar de berkeleyPunk
berkeleyPunk
 
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
Pregunta ¿Evitar fin de petición asíncrona al hacer echo?

Hola!

Pues bien, estuve haciendo pruebas con selects dependientes en AJAX y PHP. Me salió esto.

Se ve bonito, ..., por fuera. Por dentro, puede mejorarse, sin duda.

Son 3 selects. Básicamente hago 3 condicionales que checan qué ha elegido el usuario. Es decir, si acaba de elgir continente, país o provincia. El script que se ejecuta al elegir país añade sólo unas líneas al script de continente. Y el script que se ejecuta al elegir provincia añade sólo unas líneas más al de país. La cosa es que hay código repetido, y no veo la forma de evitar repetirlo.

¿Es posible eliminar los 3 condicionales, de forma que sólo haya un bloque de líneas (que no se repitan ) que devuelvan tal o cual respuesta según la elección del usuario?

Porque, digamos, elijo el continente americano. La respuesta asíncrona me devuelve los países de este continente mediante un echo, y con este echo se termina la petición. Así, no tengo forma de hacer nada más, digamos otro bucle (o lo que sea) para llenar el select de provincias, si es que el usuario eligió un país en vez de un continente. No busco evitar que termine la petición al hacer echo (entiendo que eso no se puede), la idea es no repetir código. Pero el echo no me deja!


Código PHP:
if ( ($continente!="NULL") && ($pais=="NULL") ) {
    foreach (
$arrayPaises as $claveContinente=>$paises) {
        if(
$claveContinente == $continente) {
            foreach(
$paises as $clavePais=>$provincias) {
                
$htmlPais .= '<option id="'.$clavePais.'" value="'.$clavePais.'">'.$clavePais.'</option>';
            }
            
$arrayRespuestas = array (
                
"htmlPais" => $htmlPais,
                
"statusAPP" => "Respuesta AJAX ok para paises"
            
);
            break;
        }
    }
    echo 
json_encode($arrayRespuestas);
}

else if ( (
$continente!="NULL") && ($pais!="NULL") && ($provincia=="NULL")  ) {
    foreach (
$arrayPaises as $claveContinente=>$paises) {
        if(
$claveContinente == $continente) {
            foreach(
$paises as $clavePais=>$provincias) {
                
$htmlPais .= '<option id="'.$clavePais.'" value="'.$clavePais.'">'.$clavePais.'</option>';
            }
            foreach(
$paises as $clavePais=>$provincias) {
                if( 
$clavePais == $pais) {
                    foreach(
$provincias as $claveProvincia=>$city) {
                        
$htmlProvincia .= '<option id="'.$city.'" value="'.$city.'">'.$city.'</option>';
                    }
                    
$arrayRespuestas = array (
                        
"paisElegido" => $pais,
                        
"htmlPais" => $htmlPais,
                        
"htmlProvincia" => $htmlProvincia,
                        
"statusAPP" => "Respuesta AJAX ok para ciudades"
                    
);
                    break;
                }
            }
            break;
        }
    }
    echo 
json_encode($arrayRespuestas);
}


else if ( (
$continente!="NULL") && ($pais!="NULL") && ($provincia!="NULL") ) {
    foreach (
$arrayPaises as $claveContinente=>$paises) {
        if(
$claveContinente == $continente) {
            foreach(
$paises as $clavePais=>$provincias) {
                
$htmlPais .= '<option id="'.$clavePais.'" value="'.$clavePais.'">'.$clavePais.'</option>';
            }
            foreach(
$paises as $clavePais=>$provincias) {
                if( 
$clavePais == $pais) {
                    foreach(
$provincias as $claveProvincia=>$city) {
                        
$htmlProvincia .= '<option id="'.$city.'" value="'.$city.'">'.$city.'</option>';
                        if (
$city == $provincia) {
                            
$ciudadElegida $city;
                        }
                    }
                    
$arrayRespuestas = array (
                        
"provinciaElegida" => $ciudadElegida,
                        
"paisElegido" => $pais,
                        
"htmlPais" => $htmlPais,
                        
"htmlProvincia" => $htmlProvincia,
                        
"statusAPP" => "Respuesta AJAX ok para ciudades"
                    
);
                    break;
                }
            }
            break;
        }
    }
    echo 
json_encode($arrayRespuestas);

Saludos!

Última edición por berkeleyPunk; 26/06/2015 a las 21:10