首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JSON的Livesearch函数

使用JSON的Livesearch函数
EN

Stack Overflow用户
提问于 2010-10-23 07:49:42
回答 2查看 1.1K关注 0票数 1

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

代码语言:javascript
复制
<input type="text" id="politician" name="politician" 
onkeyup="showResult(this.value)" value="Enter a politician's name"/>

标签。在包含input标记同一文件中,有一个指向名为ajax.js的外部javascript文件的链接

该文件的内容如下:

代码语言: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文件发送一个请求,该文件解析一个名为politicians.xml的硬编码XML文档的内容。

livesearch.php文件如下所示:

代码语言:javascript
复制
<?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;
?>

我的一个朋友最近告诉我,JSON是XML的一个很好的替代品,因为使用JSON将减轻服务器的压力,因为它不需要依赖PHP来解析XML文档的内容。客户端将对其进行解析。

但是,我没有足够的JSON经验来重写这个函数,所以它不能与JSON文档一起工作。有人能给我一些建议吗?

任何帮助都将不胜感激!

EN

回答 2

Stack Overflow用户

发布于 2010-10-23 08:07:05

好吧。我对你现在在做什么有了更好的了解。首先,我建议使用MongoDB (或者甚至Redis)来存储政客,而不是XML文件。想想看。很多人都会进行搜索。如果您正在搜索,然后我尝试搜索,那么我必须等待您完成对XML文件的访问,然后才能进行搜索。如果许多人同时访问相同的数据,则应该使用数据库而不是文件。即使只有一个人在搜索,每次您键入内容时,文件都必须打开和关闭。对于这类事情,数据库要快得多,尤其是。MongoDB导致这一切都发生在内存中。只需记住在你要搜索的内容上建立一个索引,在这种情况下,就是政治家的名字。

还有,有多少政客?如果小于5,000左右,您可以像Facebook过去对您的朋友所做的那样:在初始页面加载时插入一个包含所有朋友ids的JSON数组。因此,您可以预先输出一个包含所有政客姓名和ids的JSON数组,然后使用JavaScript在客户机上执行所有的生活搜索。调查一下jQuery。http://ejohn.org/blog/jquery-livesearch/

如果您打算使用AJAX,我建议您也使用jQuery,因为它更简单,而且可以为您解决浏览器兼容性问题。(您的代码可能无法在某些浏览器中运行。)对于其他事件处理和修改DOM,jQuery也非常有用,您也可以在代码中这样做。所以,你可以用它来做很多你已经在用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更快。

哑光

票数 1
EN

Stack Overflow用户

发布于 2010-10-23 09:32:59

php可以使用echo json_encode($array)返回json对象。您所需要的就是将数据格式化为php数组。json对象可作为jsonObject“‘php_array_keyname”进行访问

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4001723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档