gpt4 book ai didi

php - 使用 JSON 的实时搜索功能

转载 作者:行者123 更新时间:2023-11-28 02:49:59 25 4
gpt4 key购买 nike

我目前有一个方法,其中有一个

<input type="text" id="politician" name="politician" 
onkeyup="showResult(this.value)" value="Enter a politician's name"/>

标签。在包含输入标记的同一文件中,有一个指向名为 ajax.js 的外部 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?politician="+str,true);
xmlhttp.send();
}

基本上,javascript 文件的作用是,每当将一个值插入到输入文本框中时,就会将请求发送到名为“livesearch.php”的 php 文件,该文件解析名为politics.xml 的硬编码 XML 文档的内容.

livesearch.php文件如下:

<?php

//Make sure we have something set before we go doing work
if (isset($_GET["politician"])){

$q = $_GET["politician"];
if ($q == "")
exit();

$xmlDoc = new DOMDocument();
$xmlDoc->load("politicians.xml");
$x=$xmlDoc->getElementsByTagName('Politicians');

$hint = "";

for($i=0; $i<($x->length); $i++)
{
$y=$x->item($i)->getElementsByTagName('name');
$z=$x->item($i)->getElementsByTagName('url');
$w=$x->item($i)->getElementsByTagName('location');
$v=$x->item($i)->getElementsByTagName('position');
$u=$x->item($i)->getElementsByTagName('photo');

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 .= "<br />";
}
$hint .= "<h1 id='poli'><a id='blue' href='";
$hint .= $z->item(0)->childNodes->item(0)->nodeValue;
$hint .= "'>";
$hint .= $y->item(0)->childNodes->item(0)->nodeValue;
$hint .= "</a> <br /><a id='green'>";
$hint .= $v->item(0)->childNodes->item(0)->nodeValue;
$hint .= "</a><a id='green'>";
$hint .= $w->item(0)->childNodes->item(0)->nodeValue;
$hint .= "</a><br/><img width='30' height='40' id='schmidt' src='politicians/";
$hint .= $u->item(0)->childNodes->item(0)->nodeValue;
$hint .= ".png' /></h1>";
}
}
}
}

// Set output to "no suggestion" if no hint were found
// or to the correct values
if($hint == "")
echo "No suggestions";
else
echo $hint;
?>

我的一个 friend 最近告诉我,JSON 是 XML 的一个很好的替代品,因为使用 JSON 会给服务器带来更少的压力,因为它不需要依赖 PHP 来解析 XML 文档的内容。客户端会解析它。

但是,我没有足够的 JSON 经验来重写此函数,以便它可以与 JSON 文档一起使用。谁能给我一些建议吗?

任何帮助将不胜感激!

最佳答案

好的。我更清楚你现在在做什么。首先,我建议使用 MongoDB(甚至 Redis)来存储政客信息,而不是 XML 文件。想一想。很多人都会进行搜索。如果您正在搜索,然后我也尝试搜索,那么我必须先等您完成对 XML 文件的访问,然后才能进行搜索。如果许多人同时访问相同的数据,则应使用数据库而不是文件。即使只有一个人在搜索,每次键入内容时也必须打开和关闭该文件。对于这类事情,数据库要快得多,尤其是。 MongoDB 因为这一切都发生在 RAM 中。请记住为您要搜索的内容添加索引,在本例中为政客的名字。

还有,有多少政客?如果少于 5,000 个左右,您可以执行 Facebook 过去对您 friend 所做的操作:在初始页面加载时插入所有 friend ID 的 JSON 数组。因此,您可以预先输出所有政客姓名和 ID 的 JSON 数组,然后使用 JavaScript 在客户端上进行实时搜索。研究一下 jQuery。 http://ejohn.org/blog/jquery-livesearch/

如果您要使用 AJAX,我建议您也使用 jQuery,因为它更简单并且可以为您解决浏览器兼容性问题。 (您的代码可能无法在某些浏览器中运行。)jQuery 对于其他事件处理和修改 DOM 也非常有帮助,您也在代码中执行这些操作。所以,你可以用它来做很多你已经用 JavaScript 做的更困难的事情。另外,使用 MongoDB(查看 MongoHQ 的免费托管)。我还认为您会发现 Sinatra 比 PHP 容易得多,而且它是免费且易于托管在 Heroku 上的,您还可以将其连接到 MongoDB。这就是我对 acani 所做的 http://github.com/acani/acani

http://webhole.net/2009/08/31/how-to-read-json-data-with-php/

Scala 或 Node.js 也比 PHP 或 Ruby 更快。

马特

关于php - 使用 JSON 的实时搜索功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4001723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com