限制XML文件中回显的Ajax回复量

时间:2017-12-24 15:16:10

标签: javascript php ajax xml search

我正在创建一个AJAX-XML-PHP搜索引擎,并在w3schools上发现了一篇精彩的文章:here,但是我的XML文件非常庞大,并且它使页面也很长,无论何时向下滚动键入一个或两个字母。我想要发生的是,如果你理解我的意思,那么php文件只能回复6个'可能的搜索'。这是我的代码:

<?php
$xmlDoc=new DOMDocument();
$xmlDoc->load("places.xml");

$x=$xmlDoc->getElementsByTagName('link');

//get the q parameter from URL
$q=$_GET["q"];

$counter;

//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'); //$y = title
    $z=$x->item($i)->getElementsByTagName('url');   //$z = 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="Hmm, nothing here!";
} else {
  $response=$hint;
}

//output the response
echo $response;
?>

这是我的XML文件的片段:

<?xml version="1.0" encoding="UTF-8"?><places><link><title>Afghanistan</title><url>/places/Afghanistan</url></link><link><title>Albania</title><url>/places/Albania</url></link>

当然以</places>结尾。

我已经在这项任务中苦苦挣扎了大约2天,任何支持都会有所帮助!

注意:Ajax运行正常,客户端html + js也是如此,它只收到6个我不能做的回复!

1 个答案:

答案 0 :(得分:2)

计算“好”项目,然后检查

$minimumQLength = 4;
if (strlen($q)>$minimumQLength) {
    for($i=0; $i<($x->length); $i++) {
      if($hintcount<6){
        $y=$x->item($i)->getElementsByTagName('title'); //$y = title
         $z=$x->item($i)->getElementsByTagName('url');   //$z = url
          if ($y->item(0)->nodeType==1) {
             //find a link matching the search text
             if (stristr($y->item(0)->childNodes->item(0)->nodeValue,$q)) {
                $hintcount++;
                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>";
                }
             }
          }
     }
     else{
        break;
     }
   }
}

编辑:添加$ minimumQLength变量 - 使用它来要求更长的查询。