Tengo una duda que me ha llevado todo el día:
Quiero saber como puedo recordar o mantener el valor de una opción que mando a través de un formulario generado con ajax.
La razón de esto es por quiero que el usuario vea a que corresponde los resultados que esta viendo.
Una vez leí que se podía hacer con cookies y cosas a sí pero creo que para lo que yo lo quiero es mucho más fácil.
Aquí el código que es a lo que muchas veces le entendemos más que al autor
Este código pertenece a un catalogo de entidades y que al hacer click carga el catalogo de municipios mediante ajax.(esto me recuerda otra duda con respecto a mi bd que al final preguntare)
Código HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Ajax</title> <script language="javascript" type="text/javascript" src="ajax.js"></script> <link href="ajax.css" rel="stylesheet" type="text/css" /> </head> <body> <p class="style1">AJAX dynamic dropdowns </p> <?php if(!isset($_GET['entidad']) ) { $entidad='todo'; } else{ $entidad=$_GET['entidad']; } if(!isset($_GET['municipio']) ) { $municipio='0'; } else{ $municipio=$_GET['municipio']; } echo "$municipio" ?> <form name='myForm' accept-charset="UTF-8" action="#" method="get"> <table width="750" border="0"> <tr> <td width="5%"> Entidad</td><td width="20%"> <select name="entidad" size="1" class="textofilas" onchange="ajaxFunction()" id="entidad"> <option value="todo"<? if ($entidad=="todo") echo "selected=\"selected\""; ?>> Toda la república</option> <option value="01" <? if ($entidad=="01") echo "selected=\"selected\""; ?> >Aguascalientes</option> <option value="02" <? if ($entidad=="02") echo "selected=\"selected\""; ?> >Baja California</option> <option value="03" <? if ($entidad=="03") echo "selected=\"selected\""; ?> >Baja California Sur</option> <option value="04" <? if ($entidad=="04") echo "selected=\"selected\""; ?> >Campeche</option> <option value="05" <? if ($entidad=="05") echo "selected=\"selected\""; ?> >Coahuila</option> <option value="06" <? if ($entidad=="06") echo "selected=\"selected\""; ?> >Colima</option> <option value="07" <? if ($entidad=="07") echo "selected=\"selected\""; ?> >Chiapas</option> <option value="08" <? if ($entidad=="08") echo "selected=\"selected\""; ?> >Chihuahua</option> <option value="09" <? if ($entidad=="09") echo "selected=\"selected\""; ?> >Distrito Federal</option> <option value="10" <? if ($entidad=="10") echo "selected=\"selected\""; ?> >Durango</option> <option value="11" <? if ($entidad=="11") echo "selected=\"selected\""; ?> >Guanajuato</option> <option value="12" <? if ($entidad=="12") echo "selected=\"selected\""; ?> >Guerrero</option> <option value="13" <? if ($entidad=="13") echo "selected=\"selected\""; ?> >Hidalgo</option> <option value="14" <? if ($entidad=="14") echo "selected=\"selected\""; ?> >Jalisco</option> <option value="15" <? if ($entidad=="15") echo "selected=\"selected\""; ?> >México</option> <option value="16" <? if ($entidad=="16") echo "selected=\"selected\""; ?> >Michoacán</option> <option value="17" <? if ($entidad=="17") echo "selected=\"selected\""; ?> >Morelos</option> <option value="18" <? if ($entidad=="18") echo "selected=\"selected\""; ?> >Nayarit</option> <option value="19" <? if ($entidad=="19") echo "selected=\"selected\""; ?> >Nuevo León</option> <option value="20" <? if ($entidad=="20") echo "selected=\"selected\""; ?> >Oaxaca</option> <option value="21" <? if ($entidad=="21") echo "selected=\"selected\""; ?> >Puebla</option> <option value="22" <? if ($entidad=="22") echo "selected=\"selected\""; ?> >Querétaro</option> <option value="23" <? if ($entidad=="23") echo "selected=\"selected\""; ?> >Quintana Roo</option> <option value="24" <? if ($entidad=="24") echo "selected=\"selected\""; ?> >San Luis Potosí</option> <option value="25" <? if ($entidad=="25") echo "selected=\"selected\""; ?> >Sinaloa</option> <option value="26" <? if ($entidad=="26") echo "selected=\"selected\""; ?> >Sonora</option> <option value="27" <? if ($entidad=="27") echo "selected=\"selected\""; ?> >Tabasco</option> <option value="28" <? if ($entidad=="28") echo "selected=\"selected\""; ?> >Tamaulipas</option> <option value="29" <? if ($entidad=="29") echo "selected=\"selected\""; ?> >Tlaxcala</option> <option value="30" <? if ($entidad=="30") echo "selected=\"selected\""; ?>>Veracruz</option> <option value="31" <? if ($entidad=="31") echo "selected=\"selected\""; ?> >Yucatán</option> <option value="32" <? if ($entidad=="32") echo "selected=\"selected\""; ?>>Zacatecas</option> </select> </td> <td width="76"><div id='ajaxDiv' style="width:200px"></div></td> </tr> <tr> <td colspan="3"><input type="submit" /></td> </tr> </table> </form> <script type="text/javascript"> muestraMun(); </script> </body> </html>
Código javascript:
Ver original
// JavaScript Document function ajaxFunction(){ alert("fuckkkkkkkkkkk"); 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; } } } var entidad = 0; var municipio = 0; entidad = document.getElementById('entidad').value; //municipio = document.getElementById('municipio').value; // Receive Data Function ajaxRequest.onreadystatechange = function(){ if(ajaxRequest.readyState == 4){ ajaxDisplay.innerHTML = ajaxRequest.responseText; } else if (ajaxRequest.readyState == 1 && entidad != 'todo' ) { ajaxDisplay.innerHTML = '<div align="left">Cargando lista de municipios..</div> '; } } var queryString = "?entidad=" + entidad+"&municipio="+municipio; ajaxRequest.open("GET", "genMun.php" + queryString, true); alert(municipio); ajaxRequest.send(null); } function muestraMun(){ //if(document.getElementById('municipio').value == 'null')alert("!!"); //var munSel = document.getElementById('municipio').value; }
Y este mi archivo genmun.php
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'];
if($make !='todo')
{
//build query
$query = "SELECT municipio,nom_mun FROM xxxxxx 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;
?>
Mi idea era llamar a una función en js que verifique si existe valor para municipio y si existe llamar dese antes a la otra función que crea el catalogo de municipios pero no se cual es la diferencia o como puedo llamar a esta función.
He leído sobre onload pero no se si me funcione a mí por que deprando con firebug veo que al cargar mi página también carga las funciones más no las ejecuta hasta que doy click en el elemento de entidad.
Y una duda relacionada a como generar este catálogo de municipios es sobre que sería mejor: hacer la consulta a la bd o generar un archivo de xml con todos los elementos.
Esto es por que si queremos que no se caiga la bd por simples peticiones para construir un select, digamos que 1000 usuarios :D :D visitan el sitio al mismo tiempo y hacen click pues el servidor sufrirá, entonces no se que sería más conveniente.
Espero me puedan ayudar y no sea tanto rollo lo que he escrito..