Php ajax从数组自动完成

Php ajax从数组自动完成,php,ajax,autocomplete,Php,Ajax,Autocomplete,我正在尝试创建一个简单的自动完成文本框,从数组中获取建议。我使用的代码(基于)是: call.php <?php $list = array( "Autocomplete", "Metapher", "Metatag"); for($i=0; $i<count($list); $i++){ if(strpos($list[$i], $_GET['str']) !== FALSE && strlen($_GET['str']) >

我正在尝试创建一个简单的自动完成文本框,从数组中获取建议。我使用的代码(基于)是:

call.php

<?php
$list = array(
    "Autocomplete",
    "Metapher",
    "Metatag");

for($i=0; $i<count($list); $i++){
    if(strpos($list[$i], $_GET['str']) !== FALSE && strlen($_GET['str']) >= 2){
        echo str_ireplace($_GET['str'], '<b style="color:   red;">'.$_GET['str'].'</b>', $list[$i]) . '<br>';
    }
}

?>
从我在这里读到的内容来看,问题可能在于!=但我使用!==这是我应该做的。有什么想法吗?

它完全有效

我试过了

我有意见:大都会

它给了我隐喻和一个词

但是,对于高级用途。看看这个,你会喜欢的


您缺少异步请求。因此,当您运行这一行时:
document.getElementById(“容器”).innerHTML=ajax.responseText,请求尚未完成。看一看<代码>onreadystatechange
是您所需要的。或者使该调用同步

您也可以这样工作

您所需要的只是用php JSONE编码替换json数组,如下所示

$list = array(
"Autocomplete",
"Metapher",
"Metatag");

<script>
var availableTags = <?php echo json_encode($list) ?>
</script>
$list=array(
“自动完成”,
“梅塔弗”,
“Metatag”);
var availableTags=

希望这会有所帮助。

首先,您必须从浏览器手动检查php。其次,在js函数中,您应该检查状态:
ajax.onreadystatechanged=function(){alert(“状态:+ajax.readyState+”;状态:+ajax.Status);}
当状态为4且状态为200时,一切正常,您可以显示数据。否则就出了问题(检查一下谷歌到底用了什么)。没有什么问题。你想查什么?请看我的答案。@PLB你是对的,支票应该在那里。我认为这是一个很好的方法来实现我的目的。但是我想问一下,因为我的下一步将使用一个单独的文件,如果我使用这种方法,是否可以从文件中加载数组?是的,您可以执行任何操作,例如在加载该文件时,您希望将其添加到单独的文件中。您可以调用相同的函数。您只需加载新数组并将其赋给json编码的变量……感谢您花时间尝试此操作,但我真的必须坚持认为它不起作用。至少不合适,因为过了一段时间,我意识到一些评语会有一些结果,因为它们在字里行间,然后提出了建议。我更新了我的问题来描述这一点。无论如何,非常感谢你的链接,这真的很有帮助!谢谢你的建议,我添加了你的建议。不过问题似乎毕竟出在使用strpos的语句上。请检查我的更新。你对auto的具体输入是什么?我已经在我的电脑上试过了——如果“Aut”中的A是大写的,那么效果很好,但是小写的“Aut”不会返回任何结果。这是逻辑上的,因为
strpos
区分大小写,您可能需要使用
stripos
来代替。是的,在添加onreadystatechange和状态检查后,您是对的。我只使用较低的a尝试了它。它现在工作正常。感谢您的帮助!
if(**strpos($list[$i], $_GET['str']) !== FALSE** && strlen($_GET['str']) >= 2)
$list = array(
"Autocomplete",
"Metapher",
"Metatag");

<script>
var availableTags = <?php echo json_encode($list) ?>
</script>