【发布时间】:2012-08-17 20:45:10
【问题描述】:
我正在尝试创建一个简单的自动完成文本框,它从数组中获取建议。我正在使用的代码(基于this)是:
调用.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>';
}
}
?>
index.php
<!DOCTYPE html>
<html>
<head>
<title>AJAX - 03</title>
<script type="text/javascript">
var ajax = new XMLHttpRequest;
function t(){
ajax.open("GET", "call.php?str=" + document.getElementById("test").value, false);
ajax.send();
ajax.onreadystatechange=function()
{
if (ajax.readyState==4 && ajax.status==200)
{
document.getElementById("container").innerHTML = ajax.responseText;
}
}
}
</script>
</head>
<body>
<div id="container" style="border: 3px; border-style: solid; font-size: 42pt; border-radius: 7px;">
Text
</div>
<br><br>
<input id="test" type="text" onkeyup="javascript:t()">
</body>
</html>
但建议框中没有出现任何内容。我找不到任何语法错误,所以我认为逻辑有问题?
更新: 在 PLB 和 FAngel 的建议之后,我添加了 onreadystatechange 和检查。但是它仍然无法正常工作。实际上,我只是发现,如果您键入三个单词之一中的字母组合,建议就会正确出现。如果您输入单词的开头字母,它就不起作用。例如,如果我输入“com”作为输入,则会出现“自动完成”这个词。但是,如果我给出“Aut”则什么都没有。所以我想实际的问题在这里:
if(**strpos($list[$i], $_GET['str']) !== FALSE** && strlen($_GET['str']) >= 2)
从我在这里读到的http://php.net/manual/en/function.strpos.php 来看,问题可能是使用 != 但我应该使用 !==。有什么想法吗?
【问题讨论】:
-
首先,您必须从浏览器手动检查您的 php。其次,在您的 js 函数中,您应该检查状态:
ajax.onreadystatechanged = function() { alert("State: " + ajax.readyState + "; Status: " + ajax.status); }当状态为 4 且状态为 200 时,一切正常,您可以显示数据。否则出了点问题(检查究竟是什么使用谷歌)。 -
没有错。你想检查什么?看我的回答。
-
@PLB 你是对的,支票应该在那里。
标签: php ajax autocomplete