Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Novato con ajax

Estas en el tema de Novato con ajax en el foro de Frameworks JS en Foros del Web. Buenas. Estoy haciendo mi primer script con ajax y tengo una duda. Quiero que al rellenar un input se haga una consulta a la bbdd, ...
  #1 (permalink)  
Antiguo 28/12/2006, 03:17
 
Fecha de Ingreso: agosto-2006
Mensajes: 57
Antigüedad: 18 años, 3 meses
Puntos: 0
Novato con ajax

Buenas. Estoy haciendo mi primer script con ajax y tengo una duda. Quiero que al rellenar un input se haga una consulta a la bbdd, pero solo en el caso de que este devuelva más de un resultado se muestre una capa con estos. El problema es que no se donde hacer visible la capa. Os adjunto el código. Gracias

function cargarContenido(){
var t1, contenedor;

document.getElementById('contenedor').style.visibi lity="visible";
contenedor = document.getElementById('contenedor');
t1 = document.getElementById('texto1').value;

ajax=nuevoAjax();
ajax.open("GET", "consulta.php?t1="+t1,true);
ajax.onreadystatechange=function() {
if (ajax.readyState==4) {
contenedor.innerHTML = ajax.responseText
}
}
ajax.send(null)
}

función php:

<?
echo "Pueblos: ";
$var=$_GET['t1'];
//print_r($_GET);
include ('../conexion_mysql.php');
$SQLconsulta = "SELECT nombre FROM `pueblos` WHERE `nombre` LIKE '$var%'";
$consulta = mysql_query($SQLconsulta,$conexion) or die(mysql_error());

while($row = mysql_fetch_array($consulta)){
echo "<p>".$row['nombre']."</p> \n";
}

?>
  #2 (permalink)  
Antiguo 28/12/2006, 13:15
 
Fecha de Ingreso: diciembre-2006
Mensajes: 25
Antigüedad: 17 años, 11 meses
Puntos: 0
Re: Novato con ajax

Wop!

ese control lo debes hacer en el onreadystatechange. Para mi el problema está en que retornas directamente html y eso dificulta el trato de los datos en el cliente.

Existen muchas maneras de resolver esta situación, una aproximación sería usando JSON (te pondría en enlace en la wikipedia, pero el sistema no me deja)
La idea es que en lugar de la lista de parágrafos, el php te retornase el código javascript, algo como esto:

["nombre 1", "nombre 2", "nombre 3"]

Entonces, tu código javascript debería ser algo así:

Código:
ajax.onreadystatechange=function() 
{
  if (ajax.readyState==4) 
  {
  	var arrayResultado = eval(ajax.responseText); // evaluamos el array que generó el php
  	if (arrayResultado.length == 1)
  	{
  		//rellenamos el input
  	}
    else
    {
    	//rellenamos el contenedor y lo hacemos visible aquí
    	for (i in arrayResultado)
    	{
    		contenedor.innerHTML += "<p/>" + arrayResultado[i];
    	}
  }
}
Conste que el código no lo he probado, así que igual se coló algun error sintáctico, pero no debería estar demasiado mal ;)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:58.