A ver si logro resumir:
Tengo un formulario con una lista de opciones y al seleccionar una desplega automáticamente otra lista mediante ajax.
Una vez seleccionada una opción mando mis variables a la misma página y cuando vuelve a cargar deben estar seleccionadas las opciones que escogí para que el usuario las vea.
Lo he solucionado de esta manera:
Leo las variables desde mi url y las alamceno en una variable temporal y funciona como quería aunque el rendimiento no se sí sea el óptimo dado que tarda algo de tiempo en hacer el query.
Alguna idea de como puedo optimizar esto???
Código:
// JavaScript Document
function ajaxFunction(){
var entidad2 = 0;
var municipio = 0;
var values = getValues();
if(values != null){
entidad2 = document.getElementById('entidad').value;
municipio = unescape(values["municipio"]);
if(entidad2 != unescape(values["entidad"]) ){
municipio=0;
}
//alert(document.myForm.entidad.options[document.myForm.entidad.selectedIndex].value);
var ajaxRequest; // magic variable
var ajaxDisplay = document.getElementById('ajaxDiv');
try{
// Opera 8.0+, Firefox, Safari
ajaxRequest = new XMLHttpRequest();
}catch (e){
// Internet Explorer Browsers
try{
ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
}catch (e) {
try{
ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
}catch (e){
// Something went wrong
alert("Debe actualizar su navegador para hacer uso de la aplicació.");
return false;
}
}
}
/*if(entidad != 0)
{
// Define las variables
entidad = unescape(values["entidad"]);
municipio = unescape(values["municipio"]);
}
// municipio = document.getElementById('municipio').value;
*/
// Receive Data Function
ajaxRequest.onreadystatechange = function(){
if(ajaxRequest.readyState == 4){
ajaxDisplay.innerHTML = ajaxRequest.responseText;
}
else
if (ajaxRequest.readyState != 4 && entidad2 != "todo")
{
ajaxDisplay.innerHTML = '<div align="left">Cargando lista de municipios..</div> ';
}
}
//paso de parametros en la url
var queryString = "?entidad=" + entidad2+"&municipio="+municipio;
ajaxRequest.open("GET", "genMun.php" + queryString, true);
ajaxRequest.send(null);
}
}
//termina funcion ajax
// Esta funcion extrae los valores de la url para entidad y municipio
function getValues(){
var urlEnd = document.URL.indexOf('?');
var values = new Array();
var names;
if (urlEnd != -1){
var params = document.URL.substring(urlEnd+1, document.URL.length).split('&');
for(i=0; i<params.length; i++) {
names = params[i].split('=');
values[names[0]] = names[1];
}
}
return values;
}
Código PHP:
<?php
header('Content-Type: text/html; charset=UTF-8');
require_once("..\conexion.php"); // database connection
// Retrieve data from Query String
$make = $_GET['entidad'];
$make2 = $_GET['municipio'];
//echo "make2=".$make2;
if($make !='todo')
{
//build query
$query = "SELECT municipio,nom_mun FROM xxxxx WHERE entidad = '$make' group by nom_mun ";
$result = @mysql_query($query);
$rowEstados = mysql_fetch_array($result);
//echo $query;
/////////////////////////////////////////////////
//if($make == 'todo')
//echo "<td style=\"display:none\"></td>";
//else
//{
//Build Result String
$dropdown = "<select name=\"municipio\" id=\"municipio\">";
$dropdown .= "<option value=\"0\">Seleccione Municipio</option>";
// Insert a new row in the table for each person returned
do {
$dropdown .= "<option value=".$rowEstados['municipio'];
if($make2==$rowEstados['municipio'])
$dropdown.=" selected=\"selected\"";
$dropdown.=">".utf8_encode(ucwords(strtolower(($rowEstados['nom_mun']))))."</option>";
}while ($rowEstados = mysql_fetch_array($result));
$dropdown .= "</select>";
echo $dropdown;
//}
mysql_free_result($result);
require_once("..\cerrarbd.php");
}
else return true;
?>