15 - Cargar un control de tipo select
Simulador
(Cuando presiona el botón "ejecutar el programa" se graban todos los cuadros de texto y se ejecuta el primero de la lista mostrando en una página el resultado.
)
Confeccionaremos un problema que contenga dos controles de tipo select. En el primero almacenar una lista de carreras de estudio ("Analista de Sistemas","Telecomunicaciones" y "WebMaster") y en el segundo los nombres de las materias de la carrera seleccionada. Rescatar los datos del servidor en el momento que se selecciona una carrera.
pagina1.html
<html> <head> <title>Problema</title> <script src="funciones.js" language="JavaScript"></script> </head> <body> <h1>Prueba de cargar un control de tipo select recuperando datos del servidor mediante AJAX</h1> Seleccione la carrera: <select id="carreras" name="carreras"> <option value="0">Seleccionar....</option> <option value="1">Analista de sistemas</option> <option value="2">Telecomunicaciones</option> <option value="3">WebMaster</option> </select><span id="espera"></span><br> Materias de la carrera: <select id="materias" name="materias"> </select><br> </body> </html>
funciones.js
addEvent(window,'load',inicializarEventos,false); function inicializarEventos() { var select1=document.getElementById('carreras'); addEvent(select1,'change',mostrarMaterias,false); } var conexion1; function mostrarMaterias(e) { var codigo=document.getElementById('carreras').value; if (codigo!=0) { conexion1=crearXMLHttpRequest(); conexion1.onreadystatechange = procesarEventos; conexion1.open('GET','pagina1.php?cod='+codigo, true); conexion1.send(null); } else { var select2=document.getElementById('materias'); select2.options.length=0; } } function procesarEventos() { if(conexion1.readyState == 4) { var d=document.getElementById('espera'); d.innerHTML = ''; var xml = conexion1.responseXML; var pals=xml.getElementsByTagName('materia'); var select2=document.getElementById('materias'); select2.options.length=0; for(f=0;f<pals.length;f++) { var op=document.createElement('option'); var texto=document.createTextNode(pals[f].firstChild.nodeValue); op.appendChild(texto); select2.appendChild(op); } } else { var d=document.getElementById('espera'); d.innerHTML = '<img src="../cargando.gif">'; } } //*************************************** //Funciones comunes a todos los problemas //*************************************** function addEvent(elemento,nomevento,funcion,captura) { if (elemento.attachEvent) { elemento.attachEvent('on'+nomevento,funcion); return true; } else if (elemento.addEventListener) { elemento.addEventListener(nomevento,funcion,captura); return true; } else return false; } function crearXMLHttpRequest() { var xmlHttp=null; if (window.ActiveXObject) xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); else if (window.XMLHttpRequest) xmlHttp = new XMLHttpRequest(); return xmlHttp; }
pagina1.php
<?php $car=$_REQUEST['cod']; if ($car==1) { $materias=array('Programacion I','Analisis Matematico','Estructura de las Organizaciones','Etica Profesional'); } if ($car==2) { $materias=array('Fundamentos de Fisica','Analisis Matematico 1','Ingles Tecnico I','Sistemas de Comunicaciones I '); } if ($car==3) { $materias=array('Informatica I','Multimedia I','Bases de Datos'); } $xml="<?xml version=\"1.0\"?>\n"; $xml.="<materias>\n"; for($f=0;$f<count($materias);$f++) { $xml.="<materia>".$materias[$f]."</materia>\n"; } $xml.="</materias>\n"; header('Content-Type: text/xml'); echo $xml; ?>