Javascript 限制从XML文件回显Ajax回复的数量

Javascript 限制从XML文件回显Ajax回复的数量,javascript,php,ajax,xml,search,Javascript,Php,Ajax,Xml,Search,我正在创建一个AJAX-XML-PHP搜索引擎,并在w3schools上找到了一篇精彩的文章:,但是我的XML文件非常大,它使得页面非常长,每当键入一两个字母时都可以向下滚动。如果你明白我的意思,我希望php文件只回复6个“可能的搜索”。这是我的密码: <?php $xmlDoc=new DOMDocument(); $xmlDoc->load("places.xml"); $x=$xmlDoc->getElementsByTagName('link'); //get th

我正在创建一个AJAX-XML-PHP搜索引擎,并在w3schools上找到了一篇精彩的文章:,但是我的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>
阿富汗/地方/阿富汗/地方/阿尔巴尼亚
当然,以
结尾

我已经为这项任务奋斗了大约2天,任何支持都会很有帮助


注意:Ajax工作正常,客户端html+js也工作正常,只得到了6条回复,这是我做不到的

清点“好”项目,然后对照检查

$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=4;
if(标准长度($q)>$minimumQLength){
对于($i=0;$i长度);$i++){
if($hintcountitem($i)->getElementsByTagName('title');//$y=title
$z=$x->item($i)->getElementsByTagName('url');//$z=url
如果($y->item(0)->nodeType==1){
//查找与搜索文本匹配的链接
if(stristr($y->item(0)->childNodes->item(0)->nodeValue,$q)){
$hintcount++;
如果($hint==“”){
$hint=“”;
}否则{
$hint=$hint.“
”; } } } } 否则{ 打破 } } }

编辑:添加$minimumQLength变量-使用该变量需要更长的查询时间。

对“好”项进行计数,然后对照该项进行检查

$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=4;
if(标准长度($q)>$minimumQLength){
对于($i=0;$i长度);$i++){
if($hintcountitem($i)->getElementsByTagName('title');//$y=title
$z=$x->item($i)->getElementsByTagName('url');//$z=url
如果($y->item(0)->nodeType==1){
//查找与搜索文本匹配的链接
if(stristr($y->item(0)->childNodes->item(0)->nodeValue,$q)){
$hintcount++;
如果($hint==“”){
$hint=“”;
}否则{
$hint=$hint.“
”; } } } } 否则{ 打破 } } }

编辑:添加$minimumQLength变量-使用该变量需要更长的查询时间。

(i元=0 ;$i@SergeK.不幸的是,我已经尝试过了,出于某种原因,它只列出了前6个XML节点:/据我所知,您只需要6个结果。@TamirNahum是的,但它只列出了我的数百个XML节点中的6个。所以您希望它做什么?您说您只需要这数百个XML节点中的6个结果…
(i元=0 ;$i@SergeK.不幸的是,我已经尝试过了,出于某种原因,它只列出了前6个XML节点:/据我所知,您只需要6个结果。@TamirNahum是的,但它只列出了我的100个XML节点中的6个。所以您希望它做什么?您说您只需要这数百个XML节点中的6个结果……非常好,但是,如果我回答您的话例如,输入“g”时,它会列出所有包含g的“a”。似乎您对这些“6”有其他不太清楚的规则……您说您只想返回6个“赢家”-这将包括所有包含“g”的“a”(因为您的搜索规则声明)。如果您需要进一步限制退货,您可能需要对“q”或其他内容的长度制定规则。但是,如果我键入“g”,它将列出所有“a”,这将非常有用有一个g。似乎你对这些“6”有其他不太清楚的规则……你说你只想返回6个“赢家”-这将包括所有有一个g的“a”(因为你的搜索规则声明)。如果您需要进一步限制退货,您可能需要制定关于“q”或其他内容的长度规则。