Monday, December 6, 2010

AJAX/PHP Live search example- make websites more dynamic

Live search: when users type into search, all valid results are continually shown.
The valid results are stored in server side as xml files. Using AJAX, the search can
be made more dynamic and interactive. Example below:

1. mysearch.html:
<html>
<head>
<script type="text/javascript">

function showResult(str)
{
if (str.length==0)
  {
  document.getElementById("livesearch").innerHTML="";

  document.getElementById("livesearch").style.border="0px";
  return;
  }

if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else

  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {

  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {

    document.getElementById("livesearch").innerHTML=xmlhttp.responseText;
    document.getElementById("livesearch").style.border="1px solid #A5ACB2";
    }
  }

xmlhttp.open("GET","livesearch.php?q="+str,true);
xmlhttp.send();
}

</script>
</head>
<body>
<center><h1> Example of live search using Ajax </h1></center>

<form>
Search youtube songs: <input type="text" size="30" onkeyup="showResult(this.value)" />

<div id="livesearch"></div>
</form>
</body>
</html>
2.livesearch.php
<?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 were found
// or to the correct values
if ($hint=="")
  {
  $response="no suggestion";
  }
else

  {
  $response=$hint;
  }

//output the response
echo $response;
?>
3. links.xml
<?xml version="1.0" encoding="ISO-8859-1"?>

<!-- Edited by XMLSpy® -->
<pages>
<link>
<title>Tadap-Darling Love Song</title>

<url>http://www.youtube.com/v/bQ_mKjBWOsg</url>
</link>
<link>
<title>Tere Liye-Prince Song Full [HD] 2010 </title>

<url>http://www.youtube.com/v/S5fiqXxeO-8</url>
</link>
<link>
<title>Bahara-I Hate Luv Storys Song 2010 [HD] By(Rahat Fateh Ali Khan) </title>

<url>http://www.youtube.com/v/w-WrWfzXSCI</url>
</link>
<link>
<title>HTML br tag</title>
<url>http://www.w3schools.com/tags/tag_br.asp</url>

</link>
<link>
<title>CSS background Property</title>
<url>http://www.w3schools.com/css/pr_background.asp</url>
</link>

<link>
<title>CSS border Property</title>
<url>http://www.w3schools.com/css/pr_border.asp</url>
</link>
<link>

<title>JavaScript Date() Method</title>
<url>http://www.w3schools.com/jsref/jsref_date.asp</url>
</link>

<link>
<title>JavaScript anchor() Method</title>
<url>http://www.w3schools.com/jsref/jsref_anchor.asp</url>
</link>

</pages>
4. The final result can be see from HERE

No comments:

Post a Comment