Selector cargando datos con ajax

En este artículo vamos a ver como se realiza un selector que al seleccionar una de los opciones muestra una tabla de sus datos utilizando las técnicas AJAX para no recargar completamente la página reduciendo una petición al servidor.

Para disponer de un selector de contenidos utilizando las técnicas AJAX lo primero que deberemos hacer es incluir en el <head> una función AJAX que será la que se encargará de abrir el fichero php y acceder al servidor sin recargar la página mostrando los resultados.

<script type="text/javascript">
function showService(str) {
    if (str=="") {
      document.getElementById("txtHint").innerHTML="";
      return;
    }
    if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
    }
    else {// code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function() {
      if (xmlhttp.readyState==4 && xmlhttp.status==200) {
        document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
      }
    }
    xmlhttp.open("GET","getservice.php?service="+str,true);
    xmlhttp.send();
}
</script>

La función lo que realiza es recibir la id del registro a mostrar abriendo el fichero»getservice.php» pasándole mediante el método GET la id del registro.

En el archivo php realizamos la conexión en la base de datos, realizamos una consulta de los datos del registro con la id enviada y mostramos la información mediante una tabla.

<?php
require('config.php');

$service = $_GET['service'];

$query = mysql_query("SELECT title, price, date_added, date_modified, status FROM services WHERE service_id = '".$service."'", $conexion);

echo "<table border='1'>
<tr>
<th>Titulo</th>
<th>Precio</th>
<th>Fecha de registro</th>
<th>Fecha de modificacion</th>
<th>Estado</th>
</tr>";

while($row = mysql_fetch_array($query)) {

    echo "<tr>";
    echo "<td>" . $row['title'] . "</td>";
    echo "<td>" . $row['price'] . "</td>";
    echo "<td>" . $row['date_added'] . "</td>";
    echo "<td>" . $row['date_modified'] . "</td>";
    echo "<td>" . $row['status'] . "</td>";
    echo "</tr>";
}

echo "</table>";

mysql_close($conexion);
?>

El formulario que debemos tener el <body> de nuestra página será algo como lo siguiente:

<form>
    <select name="services" onchange="showService(this.value)">
        <option value="">Seleccione un servicio...</option>
        <?php
        $query = mysql_query("SELECT * FROM TU_TABLA ORDER BY title asc", $conexion);
        while($row = mysql_fetch_array($query)) {
            echo '<option value="'.$row['service_id'].'">'.$row['title'].'</option>';
        }
        ?>
    </select>
</form>

Mostramos un selector que al seleccionar una opción se llama a la función AJAX pasándole la id del registro. Los registros a seleccionar son capturados de la base de datos
Ver ejemplo en funcionamiento

Autor
Escrito por Jose Aguilar - Director ejecutivo y tecnológico en JA Modules. Experto programador PrestaShop y Experto programador WordPress.
Te ha servido? Valora esta entrada!
(9 votos, promedio: 5 de 5)
Comparte en las redes sociales
¿Buscas trabajo de programador?

28 respuestas a “Selector cargando datos con ajax”

  1. Nora dice:

    Hola José:
    Muy agradecida por todo el material que publicas.
    Puntualmente este ejemplo, me salvó y aprendí mucho.
    Que estés muy bien.

  2. Esteban dice:

    Hola Jose primero que nada felicitarte por el apoyo que les das en ejemplos muy prácticos a muchos nuevos programadores….

    Estoy subscrito a tu canal y plataforma hace tiempo….Lo mejor es que te vas actualizando y dejando tu un historial arriba.

    Pero en esta ocasión como un buen programador (También haciendo referencia que una ayuda mutua no está demás para perfeccionar conocimientos).

    EL script php con ajax que presentas en este enlace funciona perfecto….Está añadido y probado con nuestros propios datos de algunos proyectos que tenemos en proceso, pero nos está faltando una parte importante para cerrar el ciclo de esta.

    Cuando seleccionas un «option value» del select los datos logicamente son cargado enseguida….(eso mismo lo transformamos en una consulta foreana que termina en un insert register….pero tienes alguna referencia que antes de que se seleccione una opcion te pida confirmación? y a su vez algun result para el eror de insert?

    Gracias por tu gestión Profesional….

    Atte.

    Esteban Evert

  3. Kenshi dice:

    me carga los datos del select pero no muestra nada en la tabla al ejecutar el archivo «getservice.php» me dice: Notice: Undefined index: service in C:\xampp\htdocs\ajax-select\getservice.php on line 4 en esa linea esta declarada la variable: $service = $_GET[‘service’];

    • Jose Aguilar dice:

      Hola buenos días,

      Tendrás que hacer debug de tu código. Empieza por comprobar que está llegando con datos la variable str a la función showService(str).

      Puedes hacerlo con:
      alert(str);
      console.log(str);

      Para ver que traen.

      Saludos

  4. Raul dice:

    Hola Jose Aguilar. Necesito esto mismo que posteas, pero pasando varios campos (dia, mes y año de nacimiento)
    Entonces dependiendo de esta fecha mostrará unos campos adicionales…

    ¿Como podria adaptarlo?

    Gracias de antemano

  5. anderson dice:

    buenas, como puedo hacer eso mismo pero que me traiga las consulta de una base de datos de postgresql? estoy trabajando en un sistemas de gestion y quisiera saber como puedo hacer eso mismo que esa función me cargue los datos un trabajador,

    por favor si alguien me puede ayudar u orientar con eso, estoy trabajando con un sistema de gestion con php,ajax,js,tpl,postgresql, cada uno en sus carpetas apartes

  6. JoseQS22 dice:

    Buenas , muy buen aporte! He tratado de amoldar estos codigos a postgre y no he podido no me extrae los datos. si es tan amable de ayudarme se lo agradeceria

  7. Richard Martinez dice:

    Hola José, muy interesante tu blog. Me gustaria saber como puedo devolver otro valor si es 0.
    if ($totalRows_Recordset2>0){
    echo ($row_Recordset2[‘cupo_curso’] – $row_Recordset2[‘totalPago’]).» cupos»;
    }else {
    echo «hay cupos»;
    }
    donde:
    $row_Recordset2[‘cupo_curso’] = a cupos del curso
    $row_Recordset2[‘totalPago’] = total de cursos disponible
    me devuelve todo bien pero cuando el totalRows_Recordset2 no encuentre nada me devuelta $row_Recordset2[‘cupo_curso’]
    si encuentra cupo dice:
    6 cupos de 8
    else
    8 cupos

  8. Nayely dice:

    Hola jose, disculpa y si quiero que en vez de usar un dropdown, quiero seleccionar una fecha directamente de la tabla y que este se me autocomplete en un formulario con todos los valores de esa fecha seleccionada, como le puedo hacer?

  9. Misael dice:

    Hola Jose, buenos dias, desde ya muchisimas gracias por tu predisposicion para escribir todo este ejemplo. lo que si yo soy medio nuevo en programacion y no logro hacer andar esto con mi base de datos, vos me podrias hacer el grandisimo e inmenso favor de pasarme estos archivos, y la base sql? porque quiero dejarlo andando y reemplazar tus datos por los mios, evidentemente algo hago mal que no anda, he estado 3 dias casi 9 horas tratando de hacerlo andar y no he podido, me harias el inmeso favor de ayudarme?

    Muchas gracias

    Misael Pieruccini

  10. wilxox dice:

    Buenos días.

    Muy sencillo el ejemplo, ahora mi duda es la siguiente.

    Si el código que cargas con ajax getservice.php en el ejemplo incluyera una llamada a javascript (por ejemplo si cargará un al que se le aplica un editor de texto enriquecido que carga via javascript) como quedaría modificada la función para que realice la llamada al código javascript de getservice.php en cada una de las cargas de ajax.

    Un saludo y gracias anticipadas.

    wilwox

  11. Arturo dice:

    Que tal, mi cuestión es la siguiente

    Si yo quisiera realizar 2 o mas consultas mediante select, donde se tendría que poner el código, por ejemplo, quiero seleccionar un servicio y un costo por ejemplo seleccionar 1 el que sea y que se haga la consulta, también seleccionar el 2 y que se haga otra vez la consulta, como un filtro en cascada con sus respectivas consultas

    Espero y me haya dado a entender, Saludos cordiales

  12. LUCIANO dice:

    amigo tengo una consulta, el tutorial es magnifico solo que cuando selecciono un id se me crea otro combo. desde ya muchas gracias por el tutorial.

  13. Gabriel dice:

    Hola, Jose esta exelente tu Blog!. Una pregunta no esta para descargar este ejemplo ya que no encuentro como armar el getservice.php? Gracias y saludos!

  14. Pedro dice:

    Estimado que tal, sigo los mismo pasos pero al momento de seleccionar una opción se queda ahí sin mostrar resultado, saludos.

  15. JOSE dice:

    TU BLOG ESTA MUY INTERESANTE ME GUSTO..

  16. jose dice:

    podrias mostrar el codigo del archivo config.php y getservice para realizar este proceso

  17. jose dice:

    puede subir el codigo de getservice.php y el de config.php, marca error al ejecutar todo el codigo..

  18. alex dice:

    hola tengo un pregunta para que utilizas este campo en el script txtHint y como haces para imprimir la tabla….si podrias mostrar el condigo de el archivo getservice.php porfa.. gracias——-….:)

    • Jose Aguilar dice:

      Ok, hemos actualizado la entrada con el contenido del archivo getservice.php. El archivo config.php lo único que hace es conectar y seleccionar la base de datos.

      • Lucas dice:

        Tengo un problema al mostrar la tabla, consigo mostrar los registros en el archivo principal agregando la conexion a la base de datos pero al hacer click sobre alguno no me devuelve ningun item ni resultado, tiene algo que ver que se llame service y services? porque creo que no llego a comprender este envio y recepcion de datos de donde proviene.
        Desde ya muchas gracias y muy buen blog!

  19. javier oswaldo dice:

    hola tengo una pregunta como puedo hacer para llenar un formulario con los campos de direccion y telefono apartir de un campo de texto en el cual le tecleo el nombre de una persona no se si tengas algun ejemplo uso php y mysql gracias

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Ver más sobre