首页 > 编程 > PHP > 正文

PHP+AJAX教程(7)-AJAX Live Search

2020-03-22 16:29:24
字体:
来源:转载
供稿:网友
在下面的 AJAX 例子中,我们将演示一个实时的搜索。实时的搜索与传统搜索相比,具有很多优势: 当键入数据时,就会显示出匹配的结果 当继续键入数据时,对结果进行过滤 如果结果太少,删除字符就可以获得更宽的范围 在下面的文本框中搜索 W3School 的页面
在本例中,结果在一个 XML 文档 (links.xml) 中进行查找。为了让这个例子小而简单,我们只提供 8 个结果。HTML 表单这是 HTML 页面。它包含一个简单的 HTML 表单,针对此表单的 CSS 样式,以及指向 JavaScript 的链接: html
head
script src= livesearch.js /script
style type= text/css
#livesearch
{
margin:0px;
width:194px;
}
#txt1
{
margin:0px;
}
/style
/head
body
form
input type= text id= txt1 size= 30
onkeyup= showResult(this.value)
div id= livesearch /div
/form
/body
/html 例子解释 - HTML 表单正如你看到的,HTML 页面包含一个简单的 HTML 表单,其中的文本框名为 txt1 。表单是这样工作的:当用户在文本框中按键并松开按键时,会触发一个事件
当事件触发时,会执行名为 showResult() 的函数
表单下面是名为 livesearch 的 div 元素。它用作 showResult() 所返回数据的占位符 JavaScriptJavaScript 代码存储在与 HTML 文档连接的 livesearch.js 中:var xmlHttp
function showResult(str)
{
if (str.length==0)
{
document.getElementById( livesearch ).
innerHTML=
document.getElementById( livesearch ).
style.border= 0px
return
}
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null)
{
alert ( Browser does not support HTTP Request )
return
}
var url= livesearch.php
url=url+ ?q= +str
url=url+ sid= +Math.random()
xmlHttp.onreadystatechange=stateChanged
xmlHttp.open( GET ,url,true)
xmlHttp.send(null)
}
function stateChanged()
{
if (xmlHttp.readyState==4 || xmlHttp.readyState== complete )
{
document.getElementById( livesearch ).
innerHTML=xmlHttp.responseText;
document.getElementById( livesearch ).
style.border= 1px solid #A5ACB2
}
}
function GetXmlHttpObject()
{
var xmlHttp=null;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject( Msxml2.XMLHTTP
}
catch (e)
{
xmlHttp=new ActiveXObject( Microsoft.XMLHTTP
}
}
return xmlHttp;
}例子解释:GetXmlHttpObject 与 PHP 和 AJAX 请求 中的例子相同。showResult() 函数该函数每当一个字符输入文本框就会执行一次。如果文本域中没有输入 (str.length == 0),该函数把返回字段设置为空,并删除周围的任何边框。不过,如果文本域中存在输入,则函数执行:定义发送到服务器的 url (文件名)
把带有输入框内容的参数 (q) 添加到 url
添加一个随机数,以防止服务器使用缓存文件
调用 GetXmlHttpObject 函数来创建 XMLHTTP 对象,并在触发一个变化时告知此函数执行名为 stateChanged 的一个函数
使用给定的 url 来打开 XMLHTTP 对象
向服务器发送 HTTP 请求
stateChanged() 函数
每当 XMLHTTP 对象的状态发生变化时,该函数就会执行。当状态变为 4 (或 complete ) 时,就会使用响应文本来填充 txtHint 占位符的内容,并在返回字段周围设置一个边框。PHP 页面由 JavaScript 代码调用的服务器页面是名为 livesearch.php 的 PHP 文件。 livesearch.php 中的代码检查那个 XML 文档 links.xml 。该文档 w3school.com.cn 上的一些页面的标题和 URL。这些代码会搜索 XML 文件中匹配搜索字符串的标题,并以 HTML 返回结果: ?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;
? 例子解释:如果从 JavaScript 送来了任何文本 (strlen($q) 0),会发生:PHP 创建 links.xml 文件的一个 XML DOM 对象
遍历所有 title 元素 (nodetypes = 1),以便找到匹配 JavaScript 所传数据的 name
找到包含正确 title 的 link,并设置为 $response 变量。如果找到多于一个匹配,所有的匹配都会添加到变量
如果没有找到匹配,则把 $response 变量设置为 no suggestion
$result 是送往 livesearch 占位符的输出更多编程语言

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表