Saludos colegas...
 
Estoy tratando de optimizar un script para PHP que tengo en ASP el cual carga una lista dependiente sin recargar la pagina, pero no me carga la 2da. lista, A ver nos ayudamos entre todos y lo ponemos en el FAQ una vez lo terminemos, ya que no encontre ninguna solución definitiva o completa en PHP, para listado sin recarga ...
 
Ahora este es el codigo en PHP desde un script de ASP --->
 
La primera lista funciona y se trae los datos desde la BD...
 
<select name="escenario" size="1" onchange="Listar (document.forms.Listas.escenario[selectedIndex].value);">
					<? $cuenta = 1; while($sqlrow = mssql_fetch_array($sql_esc)){ ?>
					<option value="<?=$sqlrow['cod_esc']?>"<?if ($cuenta == 1) {?>selected<?}?>><?=$sqlrow['desc_esc']?></option>
					<? $cuenta = $cuenta+1; }?>				
					</select>
 
En la segunda lista escribi el script directamente....
 
<select name="grupos" size="1">
					<?
//Se instancia la clase de conexión y se inicia session para enviar error...
	//include_once 'src_cnn_cont.php';
	//$sql_cnn = new cnn();   
	//$cnn_sql = $sql_cnn->mssqlcnn();
?>			
<SCRIPT LANGUAGE="Javascript">
<!--
function Tupla ( campo1, campo2 )
{
	this.campo1 = campo1;
	this.campo2 = campo2;
}
<?
//Realiza una consulta para listar grupos...
	$sqlgrupo= ("SELECT GRUPOS.COD_GRUP, GRUPOS.DESC_GRUP FROM GRUPOS INNER JOIN rel_esc_grup ON GRUPOS.COD_GRUP = rel_esc_grup.COD_GRUP INNER JOIN ESCENARIO ON rel_esc_grup.COD_ESC = ESCENARIO.COD_ESC");
	$sql_grupo=mssql_query($sqlgrupo, $cnn_sql);
	$cuenta=0;
	$marc='basura';
	while($sqlrow = mssql_fetch_array($sql_grupo)) {
		if ($marc !== $sqlrow['COD_GRUP']) {
		//cambio de categoria, empiezo a contar en 0
		$cuenta = 0;
		$marc = $sqlrow['gru'];
		//además tengo que crear un nuevo array para la categoría
?>
	var opciones<?=$marc;?> = new Array();
<?
	}
?>
	opciones<?=$marc; ?>[<?=$cuenta; ?>]=new Tupla("<?=$sqlrow['DESC_GRUP']; ?>","<?=$sqlrow['COD_GRUP']; ?>");		
<?
	$cuenta = cuenta+1;
	}
?>
 <?
//Limpiamos objetos
	//mssql_free_result($sql_grupo);
?>
	var contador;
	function Listar ( array ) {
// Compone la lista dependiente a partir del valor de la opcion escogida en la lista "padre"
	BorrarLista();
	array = eval("opciones" + array);
	for (contador=0; contador<array.length; contador++) 
	{
 
// añade elementos nuestro combobox
	var optionObj = new Option( array[contador].campo1, array[contador].campo2 );
	Listas.grupos.options[contador] = optionObj;
 
} // for
} // ComponerLista
 
	function BorrarLista() {
	Listas.grupos.length=0;
	}
 
//Inicializamos
	Listar (1);
</SCRIPT>
 
Como podran notar, creo que ambos tienen la misma carcateristicas pero en PHP no logro cargar la segunda lista, la primera si se carga...
 
 
Este es el original en ASP Este es el codigo original en ASP...
 
<form name="Listas"....
 
La primera lista tiene...
 
<select name="gerencia" size="1" tabindex="2" onchange="Listar (document.forms.Listas.gerencia[selectedIndex].value);">
<%
	cuenta = 1
	WHILE not rsgcia.EOF 
%>
	<option value="<%=rsgcia.Fields("centro_gestor")%>"<%IF cuenta=1 THEN%>selected<%END IF%>><%=rsgcia.Fields("descripcion")%></option>
<%
	rsgcia.MoveNext
	cuenta=cuenta+1
	WEND
rsgcia.Close
%>													</select>
 
La segunda lista tiene...
<!-- #INCLUDE FILE="lista_ofic.asp" -->
 
Este es el script escrito en lista_ofic......
 
<!-- #INCLUDE FILE="../../conexiones/conex_per_inf.asp" -->
<SCRIPT LANGUAGE="Javascript">
<!--
function Tupla ( campo1, campo2 )
{
	this.campo1 = campo1;
	this.campo2 = campo2;
}
<%
'Vamos a crear nuestros arrays de modelos desde ASP
'El primer if detecta un cambio en la categoría para crear un nuevo array en Javascript
	sqlger = "SELECT centro_gestor [ 1, 5 ], centro_gestor AS gestor, descripcion FROM estructura_sap WHERE (clasificacion = 1 OR clasificacion = 2) ORDER BY gestor "
		SET rsger = cnn.Execute(sqlger)
		cuenta=0
		marc="basura"
	WHILE NOT rsger.EOF 
		IF marc<>rsger.Fields("centro_gestor") THEN
		'cambio de categoria, empiezo a contar en 0
			cuenta=0
			marc=rsger.Fields("centro_gestor")
		'además tengo que crear un nuevo array para la categoría
%>
		var opciones<%=marc%> = new Array();
<%
		END IF
%>
		opciones<%=marc%>[<%=cuenta%>]=new Tupla("<%=rsger.Fields("descripcion")%>","<%=rsger  .Fields("gestor")%>");
<%
		cuenta=cuenta+1
		rsger.MoveNext
	WEND
%>
 <%
'Limpiamos objetos
	rsger.Close
	set rsger=nothing
%>
	var contador;
	function Listar ( array ) {
// Compone la lista dependiente a partir del valor de la opcion escogida en la lista "padre"
	BorrarLista();
	array = eval("opciones" + array);
	for (contador=0; contador<array.length; contador++) 
	{
 
// añade elementos nuestro combobox
	var optionObj = new Option( array[contador].campo1, array[contador].campo2 );
	Listas.Oficina.options[contador] = optionObj;
 
} // for
} // ComponerLista
 
	function BorrarLista() {
	Listas.Oficina.length=0;
	}
 
//Inicializamos
	Listar (1);
-->
</SCRIPT>
 
Este script funciona.... 
   
 


 revisa
 revisa 

