TECH I.S.

PHPの例 - AJAXライブ検索


AJAXを使用すると、よりユーザーフレンドリーでインタラクティブな検索を作成できます。


AJAXライブ検索

次の例は、入力中に検索結果を取得するライブ検索を示しています。

ライブ検索には、従来の検索と比較して多くの利点があります。

  • 入力すると結果が表示されます。
  • 入力を続けると結果が絞り込まれます。
  • 結果が狭すぎる場合は、文字を削除してより広い結果を表示します。

以下の入力フィールドでTECH I.S.ページを検索します。

上記の例の結果は、XMLファイル (リンク.xml)。この例を小さく簡単にするために、使用できる結果は6つのみです。


例の説明 - HTMLページ

ユーザーが上記の入力フィールドに文字を入力すると、関数「showResult()」が実行されます。この関数は、「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>

ソースコードの説明:

入力フィールドが空の場合(str.length==0)、関数は livesearchプレースホルダーの内容をクリアし、関数を終了します。

入力フィールドが空でない場合、showResult()関数は次を実行します。

  • XMLHttpRequestオブジェクトを作成する。
  • サーバーの応答が準備できたときに実行する関数を作成する。
  • サーバー上のファイルにリクエストを送信する。
  • パラメーター(q)がURLに追加されていることに注意してください(入力フィールドの内容と共に)

PHPファイル

上記のJavaScriptによって呼び出されるサーバー上のページは、「livesearch.php」というPHPファイルです。

「livesearch.php」のソースコードは、検索文字列に一致するタイトルのXMLファイルを検索し、結果を返します。

<?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; ?>

JavaScriptから送信されたテキストがある場合(strlen($q) > 0)、次のことが起こります。

  • XMLファイルを新しいXML DOMオブジェクトにロードする。
  • すべての<title>要素をループして、JavaScriptから送信されたテキストから一致を見つける。
  • 「$response」変数に正しいURLとタイトルを設定します。 複数の一致が見つかった場合、すべての一致が変数に追加されます。
  • 一致するものが見つからない場合、$response変数は「提案なし」に設定されます。


プログラミング学習を加速させる

プログラミングをプロの講師に教えてもらいませんか。

テックアイエスのプログラミングスクールは初心者も大歓迎です。年齢制限もありません。転職・副業に強く、挫折させない手厚いサポートで稼ぐ力を身につけましょう!

スクールの詳細