Hoy os presento dos formas distintas de cómo cargar dinámicamente en un campo desplegable de HTML (select) a través de la librería de Javascript JQUERY llamando a un webservice en PHP que extrae los datos de una base de datos MySQL.

Para ello nos basaremos en un ejemplo con dos maneras de cargar el select. En la primera, se carga automáticamente un campo  desplegable con los países de nuestra base de datos MySQL de una forma sencilla con una llamada en AJAX, al seleccionar el país utilizaremos la segunda forma con la devolución de un objeto JSON desde otro webservice en PHP.

 

Ejemplo sencillo con una llamada en AJAX

Lo primero que haremos es crear la parte en HTML, hay varias formas de hacerlo pero me he decantado por un DIV que incluye nuestro SELECT

<div class="selector-pais">
     Elige un país
     <select></select>
</div>

 

En segundo lugar, dentro del mismo archivo HTML le añadiremos el script en Javascript con una llamada AJAX de JQUERY a nuestro webservice getPaises.php y que nos inserte el resultado en el select dentro del div que tiene la clase selector-pais («.selector-pais select»).

          <script type="text/javascript">
                $(document).ready(function() {
                    $.ajax({
                            type: "POST",
                            url: "getPaises.php",
                            success: function(response)
                            {
                                $('.selector-pais select').html(response).fadeIn();
                            }
                    });

                });
            </script>

 

Finalmente construiremos nuestro webservice PHP en el que primero llamaremos a nuestra base de datos y haremos que nos devuelva los valores directamente en las etiquetas OPTION para insertarlas dentro de nuestro SELECT.

$link = mysql_connect('localhost', 'usuariobbdd', 'password')
    or die('No se pudo conectar: ' . mysql_error());
mysql_select_db('nombrebasededatos') or die('No se pudo seleccionar la base de datos');

$query="SELECT id,nombre FROM paises ORDER BY nombre";
$result = mysql_query($query)
        or die("Ocurrio un error en la consulta SQL");
mysql_close();
echo '<option value="0">Seleccionar</option>';
while (($fila = mysql_fetch_array($result)) != NULL) {
    echo '<option value="'.$fila["id"].'">'.$fila["nombre"].'</option>';
}
// Liberar resultados
mysql_free_result($result);

// Cerrar la conexión
mysql_close($link);

 

Ejemplo con una respuesta en JSON

En este segundo ejemplo vamos a utilizar una manera más elegante, nuestro webservice nos devolverá un JSON y nuestro script lo añadirá a nuestro campo desplegable.

En este caso rescataremos el valor del país seleccionado del SELECT del ejemplo anterior y con ese valor nuestro webservice PHP devolverá las regiones de ese país.

Empezamos con la parte HTML que es idéntica a la del otro ejemplo, sólo le cambiamos la clase del DIV.

<div class="con-json">
    <h4>Este es un ejemplo con JSON</h4>
    Regiones:
    <select></select>    
</div>

 

Ahora insertamos nuestro script en el que cada vez que se actualice el SELECT de paises del ejemplo anterior(«.selector-pais select»), realizará una llamada $.getJSON que recogerá el JSON enviado desde el servicio web(getRegionesJson.php), lo recorrerá con un .each y añadirá cada elemento como option con .append de JQUERY a nuestro select, en este caso «.con-json select».

<script type="text/javascript">
$(document).ready(function() {
    $(".selector-pais select").change(function() {
	$(".con-json select").empty();
	$.getJSON('getRegionesJson.php?pais='+$(".selector-pais select").val(),function(data){
	    $.each(data, function(id,value){
		$(".con-json select").append('<option value="'+id+'">'+value+'</option>');
	    });
	});
    });
});
</script>

 

Finalmente, nuestro webservice PHP, conecta con nuestra base de datos y el resultado lo guarda en un array que luego transforma en JSON con json_encode y lo muestra con print_r.

$link = mysql_connect('localhost', 'usuariobbdd', 'password')
    or die('No se pudo conectar: ' . mysql_error());
mysql_select_db('nombrebasededatos') or die('No se pudo seleccionar la base de datos');

$query="SELECT id,nombre FROM regiones WHERE id_pais=".$_REQUEST["pais"]." ORDER BY nombre";
$result = mysql_query($query)
        or die("Ocurrio un error en la consulta SQL");
mysql_close();

$regiones = array();
while (($fila = mysql_fetch_array($result)) != NULL) {
    $regiones[$fila['id']] = $fila['nombre'];
}
print_r(json_encode($regiones));

// Liberar resultados
mysql_free_result($result);

// Cerrar la conexión
mysql_close($link);

 

Y ya tendríamos nuestro ejemplo acabado, podéis ver una demo en:

https://bitacoraweb.info/code/cargar-select-dinamicamente/

Y lo podéis descargar:

Descargar

 

Descargas realizadas: 6.858

Espero que os sea útil.

(Visitado 54.826 veces, 1 visitas hoy)