Top-News > Informatique > Recherche Auto Complétée AJAX Exemple
Recherche Auto Complétée AJAX Exemple

Voici un exemple de Recherche Auto Complétée en AJAX . ( pâle imitation de la suggestion de google )
Pour réaliser ce champ de recherche j' ai décidé de ne pas utiliser de librairies javascript . Mon point de départ a donc été une fonction qui permet de créer une requête ajax ( standard ).
La recherche s' effectue ici sur le titre des billets du blog , il est donc tout à fait possible de l' intégrer dans un thème wordpress ( voir précision plus loin ) .
Avant de débuter la lecture , voici le résultat final : http://top-news.fr/demos/autocomplete/ .
Pour télécharger les sources : http://top-news.fr/demos/autocomplete/ajaxAutoComplete.rar ( le code est un peu beaucoup illisible sur cette page ) . J' ai mis en commentaire dans le fichier php un tableau pour tester sans wordpress .
LE CODE
Le " système " se compose de deux fichiers : la page html contenant le formulaire ( j' ai inclus le javascript et le css il faudrait les déclarer dans des fichiers js et css ) et d' une page php traitant la requête envoyée .
header('Content-Type: text/html; charset=utf-8');
?>
<html>
<head>
<title>champ auto complété ajax</title>
<script>
function creerAjaxRequete() { // adaptation de https://developer.mozilla.org/fr/AJAX/Premiers_pas
var texteCherche = document.forms['completeAuto'].rechercheID.value;
var url = 'http://top-news.fr/demos/autocomplete/ajaxAutoComplete2.php';
var httpRequest = false;
if (window.XMLHttpRequest) { // Mozilla, Safari,...
httpRequest = new XMLHttpRequest();
if (httpRequest.overrideMimeType) {
httpRequest.overrideMimeType('text/xml');
}
}
else if (window.ActiveXObject) { // IE
try {
httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try {
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {}
}
}
if (!httpRequest) {
alert('Abandon Impossible de créer une instance XMLHTTP');
return false;
}
var params = 'variable='+texteCherche;
httpRequest.open("POST", url, true);
//Send the proper header information along with the request
httpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
httpRequest.setRequestHeader("Content-length", params.length);
httpRequest.setRequestHeader("Connection", "close");
httpRequest.onreadystatechange = function() {//Call a function when the state changes.
if(httpRequest.readyState == 4 && httpRequest.status == 200) {
changeDiv(httpRequest.responseText);
}
}
httpRequest.send(params);
}
function changeDiv(texte) {
document.getElementById('conteneur').innerHTML = texte;
}
function effaceDiv()
{
document.getElementById('conteneur').innerHTML = '';
}
</script>
<style>
form{padding:10px;background:#EFEFEF;}
input{
width:250px;
margin:0px;
}
#conteneur{
position:relative;
}
.infoBulle{
background:#FFFFDF;
display:block;
width:250px;
margin:0;
height:200px;
overflow-y:scroll;
overflow-x:none;
position:absolute;
top:0px;
}
.infoBulle a{
color:blue;
text-decoration:none;text-underline:none;
}
ul{
display:inline;
list-style:none;
margin:0px;
padding:0px;
}
li{
display:block;
list-style:none;
padding:4px;
border-bottom:1px solid grey;
}
li:nth-child(even) {background-color:#FFFFDF} /*lignes paires */
li:nth-child(odd) {background-color:#FEFF9F} /*lignes impaires */
</style>
</head>
<body onclick="effaceDiv()">
<h1>Champ de Recherche Auto Complété en AJAX</h1>
<form name="completeAuto">
<input name="MaRecherche" id="rechercheID" value="" onkeyup="creerAjaxRequete()" onclick="creerAjaxRequete()"/> <small>le champ recherche dans les titres des billets du blog ( limité à 1000 billets ).</small>
<div id="conteneur">
</div>
</form>
<p>le texte de ma page le texte de ma page le texte de ma page le texte de ma page le texte de ma page le texte de ma page le texte de ma page</p>
<p>le texte de ma page le texte de ma page le texte de ma page le texte de ma page le texte de ma page le texte de ma page le texte de ma page</p>
<p>le texte de ma page le texte de ma page le texte de ma page le texte de ma page le texte de ma page le texte de ma page le texte de ma page</p>
<p>le texte de ma page le texte de ma page le texte de ma page le texte de ma page le texte de ma page le texte de ma page le texte de ma page</p>
<p>le texte de ma page le texte de ma page le texte de ma page le texte de ma page le texte de ma page le texte de ma page le texte de ma page</p>
<p>le texte de ma page le texte de ma page le texte de ma page le texte de ma page le texte de ma page le texte de ma page le texte de ma page</p>
<p>le texte de ma page le texte de ma page le texte de ma page le texte de ma page le texte de ma page le texte de ma page le texte de ma page</p>
</body>
</html>
Je ne reviendrai pas ici sur la requête ajax , de nombreux sites vous proposent des tutoriels très complets où les explications sont beaucoup plus pertinentes que les miennes .
La méthode POST pour envoyer les données évite pas mal de soucis et notamment des problèmes d' encodage des caractères .
Voici le fichier php appelé par la fonction creerAjaxRequete . Si vous souhaitez intégrer cette recherche dans votre thème , il est conseillé d' utiliser la classe wpdb de wordpress .
header('Content-type: text/html; charset=UTF-8');
/* on récupère le texte entré dans le champ de recherche */
$recherche = addslashes($_POST['variable']);
/* je me connecte à la table des billets de mon blog */
$db = mysql_connect('localhost', 'LOGIN', 'MOTdePASSE');
mysql_select_db('NOMdeLaBASE',$db);
/* on sélectionne les billets dont le titre ressemble à la recherche */
$sql = "SELECT post_title,post_name FROM wp_posts WHERE post_title LIKE '%$recherche%' AND post_status = 'publish' ";
mysql_query("SET NAMES 'utf8'");
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
/* on construit un tableau avec les titres et les url des billets trouvés */
$tableau = array();
$i = 0;
while($data = mysql_fetch_assoc($req))
{
$tableau[$i][0] = $data['post_title'];
$tableau[$i][1] = $data['post_name'];
$i++;
}
/* des variables */
$rechercheLongueur = strlen($recherche);
$nombreDeReponse = 0 ;
if($rechercheLongueur!=0)
{
for($i=0 ; $i<sizeof($tableau) ; $i++)
{
/* on test si notre recherche correspond à un titre */
if ( ereg( strtolower($recherche) , strtolower($tableau[$i][0]) ) )
{
/* on met en gras le texte recherché dans les réponses */
$tableau[$i][0] = str_replace ( $recherche , '<b>'.$recherche.'</b>' , $tableau[$i][0] );
$listeReponse .= '<li><a href="http://top-news.fr/'.$tableau[$i][1].'/" target="_blank">'.$tableau[$i][0].'</a></li>';
$nombreDeReponse=1;
}
}
}
if($nombreDeReponse>0)
{
$reponseFinal = '<div class="infoBulle"><ul>'.$listeReponse.'</ul></div>';
echo $reponseFinal;
}
else
{
echo '';
}
mysql_close();
?>
Si des erreurs sont présentes n' hésitez pas me donner vos corrections dans les commentaires . Ce sera avec plaisir que je modifierai le code .
le 6 avril 2010
plus de news sur Recherche Auto Complétée AJAX Exemple
dans les billets :
Ajax avec JQuery - exemple : changement du contenu d' un divle 29 janvier 2009
Ajax Amsterdam - Marseille à la télévision sur M6le 16 mars 2009
Exemple : image en fond d' un input ( HTML / CSS )le 15 mars 2009
OM - Ajax : But de Niang - vidéo Coupe de l' UEFAle 12 mars 2009
Fiorentina - Ajax Amsterdam vidéo du butle 20 février 2009
tourner les pages de la catégorie Informatique :

Diffusion télé de Marseille - Ajax Amsterdam - Coupe de l' UEFA
Sélection équipe de France de Basket pour les Jeux Olympiques 2012
Première Liste de Laurent Blanc pour l'Euro 2012
Nouveau Dribble inventé par Neymar (vidéo)
Présentation Maillot équipe de France Euro 2012
Calendrier diffusions télé des matchs de l'Euro 2012 ( préparez la carte bancaire ! )
Des tags pour les images WordPress
WordPress - Insérer automatiquement la publicité au milieu du texte
LE Livre pour réussir son Blog et plus
Télécharger sur Megaupload Gratuitement comme en Premium
Nokia Booklet 3G vidéo
Enregistrer la radio ( webradios ) en MP3 en un clic - gratuit
Commentaire
J’aime le paris saint germain et je vais jouer la bas nyam bernard jeune camerounais de 17ans
Posté le 24 octobre 2011
Votre avis sur le billet : Recherche Auto Complétée AJAX Exemple