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

buscador en ajax

Estas en el tema de buscador en ajax en el foro de Frameworks JS en Foros del Web. hola a todos. quiero crear un buscador con ajax. tengo uno medio medio pero no lo hago funcionar del todo correctamente. podéis echarme un cable ...
  #1 (permalink)  
Antiguo 08/01/2008, 11:57
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 18 años, 1 mes
Puntos: 1
buscador en ajax

hola a todos. quiero crear un buscador con ajax. tengo uno medio medio pero no lo hago funcionar del todo correctamente. podéis echarme un cable o sabéis de algún sitio donde haya un tutorial para poder ver los pasos a crear con el buscador? gracias a todos
  #2 (permalink)  
Antiguo 08/01/2008, 13:08
Avatar de Shiryu_Libra
Colaborador
 
Fecha de Ingreso: febrero-2007
Ubicación: Cantando "Screenager" en "Kirafa Kaput"
Mensajes: 3.614
Antigüedad: 17 años, 9 meses
Puntos: 88
Re: buscador en ajax

y por que no mejor pones tu codigo y buscamos mejorarlo????
__________________
"Eres parte del problema, parte de la solucion o parte del paisaje"
Un Saludo desde Desierto de Altar, Sonora, MX.
Shiryu_libra
  #3 (permalink)  
Antiguo 09/01/2008, 05:37
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 18 años, 1 mes
Puntos: 1
Re: buscador en ajax

ok. perdona. mira lo que voy a hacer es poner el ejemplo que me valió a mí para realizar mi buscador y sobre él os hago las consultas, ok? bueno. os cuento. Supongamos una base de datos llamada 'ejemplo' con una tabla llamada 'alumnos' donde existen tres campos: idalumno (autonumérico), nombre, direccion.

las funciones en javascript son las siguientes: página funciones.js

Código PHP:
function nuevoAjax(){
    var 
xmlhttp=false;
    try{
        
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    }catch(
e){
        try {
            
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }catch(
E){
            
xmlhttp false;
        }
    }

    if (!
xmlhttp && typeof XMLHttpRequest!='undefined') {
        
xmlhttp = new XMLHttpRequest();
    }
    
    return 
xmlhttp;
}

function 
buscarDato(){
    
resul document.getElementById('resultado');
    
    
bus=document.frmbusqueda.dato.value;
    
    
ajax=nuevoAjax();
    
ajax.open("POST""busqueda.php",true);
    
ajax.onreadystatechange=function() {
        if (
ajax.readyState==4) {
            
resul.innerHTML ajax.responseText
        
}
    }
    
ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    
ajax.send("busqueda="+bus)


El formulario de consulta es el siguiente:

Código HTML:
<head>
<title>Buscador en Ajax</title>
<!-- referenciamos al archivo funciones.js donde se encuentra la funcion objetoAjax-->
<script language="JavaScript" type="text/javascript" src="funciones.js"></script>
</head>

<body>
<form name="frmbusqueda" action="" onsubmit="buscarDato(); return false">
  <div align="center">Buscar Alumno:
    <input type="text" name="dato" /> 
  </div>
</form>
<fieldset><legend>Resultado</legend>
<div id="resultado"></div>
</fieldset>
</body> 
Por último, la página que consulta los datos y los muestra es la siguiente: busqueda.php

Código PHP:

$busqueda=$_POST['busqueda'];
// DEBO PREPARAR LOS TEXTOS QUE VOY A BUSCAR si la cadena existe
if ($busqueda<>''){
    //CUENTA EL NUMERO DE PALABRAS
    $trozos=explode(" ",$busqueda);
    $numero=count($trozos);
    if ($numero==1) {
        //SI SOLO HAY UNA PALABRA DE BUSQUEDA SE ESTABLECE UNA INSTRUCION CON LIKE
        $cadbusca="SELECT * FROM alumnos WHERE nombre LIKE '%$busqueda%' OR direccion LIKE '%$busqueda%' LIMIT 10;";
    } elseif ($numero>1) {
        //SI HAY UNA FRASE SE UTILIZA EL ALGORTIMO DE BUSQUEDA AVANZADO DE MATCH AGAINST
        //busqueda de frases con mas de una palabra y un algoritmo especializado
        $cadbusca="SELECT * , MATCH ( nombre, direccion) AGAINST ( '$busqueda' ) AS Score FROM alumnos WHERE MATCH ( nombre, direccion) AGAINST ( '$busqueda' ) ORDER BY Score DESC LIMIT 50;";
    }
    
    function limitarPalabras($cadena, $longitud, $elipsis = "..."){
        $palabras = explode(' ', $cadena);
        if (count($palabras) > $longitud)
            return implode(' ', array_slice($palabras, 0, $longitud)) . $elipsis;
        else
            return $cadena;
    }
?>
    <table style="width:100%;" border="1px"> 
    <tbody>
        <tr>
            <td class="nombre">Nombre</td>
            <td class="direccion">Direccion</td>
            
        </tr>
<?php
    $result
=mysql_query($cadbusca$con);
    
$i=1;
    while (
$row mysql_fetch_array($result)){
        echo 
"
            <tr>
                <td class=\"nombre\">"
.$row[nombre]."</td>
                <td class=\"direccion\">"
.limitarPalabras($row[direccion],20)."</td>
                
            </tr>"
;
        
$i++;
    }
}
?>
    </tbody>
    </table>
Bien. hasta aquí funciona todo más o menos. mis preguntas ahora serían:

1.- ¿cómo hago para que si no existen datos con los criterios de búsqueda aparezca que no existen datos?
2.- ¿cómo hago para meter un mensaje que diga se han encontrado "x" resultados con esos criterios de búsqueda?

a ver si me echáis un cable. gracias
  #4 (permalink)  
Antiguo 10/01/2008, 01:03
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 18 años, 1 mes
Puntos: 1
Re: buscador en ajax

alguna ayuda?
  #5 (permalink)  
Antiguo 10/01/2008, 09:20
 
Fecha de Ingreso: febrero-2007
Ubicación: Jaén
Mensajes: 40
Antigüedad: 17 años, 10 meses
Puntos: 1
Re: buscador en ajax

Hola.

Creo que tu solución está en hacer un num_rows de $result y ver si los registros devueltos son 0 para indicar que no se han encontrado resultados o indicar el número de resultados que te ha delvuelto el $result.

Quedaría:
Código PHP:
 $n_regs=mysql_num_rows($result);
 if(
$n_regs==0)
    echo 
"<table style=\"width:100%;\" border=\"1px\"> 
    <tbody>
        <tr><td colspan=\"2\">No se han encontrado resultados.</td></tr>
    </tbody>
    </table>"
;
 else
{
     if(
$n_regs>0)
     {
         echo 
"Se han econtrado $n_regs resultados<br />
         <table style=\"width:100%;\" border=\"1px\"> 
         <tbody>
          <tr>
            <td class=\"nombre\">Nombre</td>
            <td class=\"direccion\">Direccion</td>
          </tr>"
;

         while (
$row mysql_fetch_array($result)){
         echo 
"
            <tr>
                <td class=\"nombre\">"
.$row[nombre]."</td>
                <td class=\"direccion\">"
.limitarPalabras($row[direccion],20)."</td>     
            </tr>"
;
         }
         echo 
"</tbody>
         </table>"
;

Espero que te sirva de ayuda. Saludos,.
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 02:36.