Home » PHP » PHP AJAX : Contoh Live Search PHP AJAX

PHP AJAX : Contoh Live Search PHP AJAX

by Hanifah Nurbaeti
by Hanifah Nurbaeti

AJAX dapat digunakan untuk membuat pencarian yang lebih ramah pengguna dan interaktif.

Live Search AJAX

Live Search memiliki lebih banyak manfaat dibandingkan dengan pencarian tradisional, yaitu:

  • Hasil ditampilkan saat mengetik
  • Hasil menyempit saat terus mengetik
  • Jika hasil menjadi terlalu sempit, hapus karakter untuk melihat hasil yang lebih luas

Di bawah ini merupakan links.xml yang membuat contoh kecil dan sederhana untuk melakukan live search AJAX :

Contoh :

<pages>
<link>
<title>HTML a tag</title>
<url>https://www.dosenit.com/tags/tag_a.asp</url>
</link>
<link>
<title>HTML br tag</title>
<url>https://www.dosenit.com/tags/tag_br.asp</url>
</link>
<link>
<title>CSS background Property</title>
<url>https://www.dosenit.com/cssref/css3_pr_background.asp</url>
</link>
<link>
<title>CSS border Property</title>
<url>https://www.dosenit.com/cssref/pr_border.asp</url>
</link>
<link>
<title>JavaScript Date Object</title>
<url>https://www.dosenit.com/jsref/jsref_obj_date.asp</url>
</link>
<link>
<title>JavaScript Array Object</title>
<url>https://www.dosenit.com/jsref/jsref_obj_array.asp</url>
</link>
</pages>

Penjelasan Contoh – Halaman HTML

Saat pengguna mengetik karakter di kolom input, fungsi “showResult()” dijalankan. Fungsi ini dipicu oleh peristiwa “onkeyup“:

<html>
<head>
<script>
function showResult(str) {
  if (str.length==0) {
    document.getElementById("livesearch").innerHTML="";
    document.getElementById("livesearch").style.border="0px";
    return;
  }
  var xmlhttp=new XMLHttpRequest();
  xmlhttp.onreadystatechange=function() {
    if (this.readyState==4 && this.status==200) {
      document.getElementById("livesearch").innerHTML=this.responseText;
      document.getElementById("livesearch").style.border="1px solid #A5ACB2";
    }
  }
  xmlhttp.open("GET","livesearch.php?q="+str,true);
  xmlhttp.send();
}
</script>
</head>
<body>

<form>
<input type="text" size="30" onkeyup="showResult(this.value)">
<div id="livesearch"></div>
</form>

</body>
</html>

Penjelasan kode :

Jika field input kosong (str.length == 0), fungsi membersihkan konten placeholder pencarian kehidupan dan keluar dari fungsi.

Jika kolom input tidak kosong, fungsi showResult() akan menjalankan yang berikut ini:

  • Buat objek XMLHttpRequest
  • Buat fungsi untuk dijalankan saat respons server siap
  • Kirim permintaan ke file di server
  • Perhatikan bahwa parameter (q) ditambahkan ke URL (dengan konten field input)

File PHP

Halaman di server yang disebut dengan JavaScript di atas adalah file PHP yang disebut “LiveSearch.php”.

Kode berikut “livesearch.php” mencari file XML untuk judul yang cocok dengan string pencarian dan mengembalikan hasilnya:

<?php
$xmlDoc=new DOMDocument();
$xmlDoc->load("links.xml");

$x=$xmlDoc->getElementsByTagName('link');

//get the q parameter from URL
$q=$_GET["q"];

//lookup all links from the xml file if length of q>0
if (strlen($q)>0) {
  $hint="";
  for($i=0; $i<($x->length); $i++) {
    $y=$x->item($i)->getElementsByTagName('title');
    $z=$x->item($i)->getElementsByTagName('url');
    if ($y->item(0)->nodeType==1) {
      //find a link matching the search text
      if (stristr($y->item(0)->childNodes->item(0)->nodeValue,$q)) {
        if ($hint=="") {
          $hint="<a href='" .
          $z->item(0)->childNodes->item(0)->nodeValue .
          "' target='_blank'>" .
          $y->item(0)->childNodes->item(0)->nodeValue . "</a>";
        } else {
          $hint=$hint . "<br /><a href='" .
          $z->item(0)->childNodes->item(0)->nodeValue .
          "' target='_blank'>" .
          $y->item(0)->childNodes->item(0)->nodeValue . "</a>";
        }
      }
    }
  }
}

// Set output to "no suggestion" if no hint was found
// or to the correct values
if ($hint=="") {
  $response="no suggestion";
} else {
  $response=$hint;
}

//output the response
echo $response;
?>

Jika ada teks yang dikirim dari JavaScript (strlen ($ q)> 0), berikut ini terjadi:

  • Muat file XML ke dalam objek XML DOM baru
  • Ulangi semua elemen  <title> untuk menemukan kecocokan dari teks yang dikirim dari JavaScript.
  • Menyetel url dan judul yang benar dalam variabel “$response”. Jika lebih dari satu kecocokan ditemukan, semua kecocokan ditambahkan ke variabel.
  • Jika tidak ada kecocokan yang ditemukan, variabel $response disetel ke “tidak ada saran”

You may also like