【发布时间】:2016-09-22 17:04:23
【问题描述】:
我正在尝试向文本字段添加自动完成功能。 这曾经可以工作,但后来我切换到 MVC 结构,现在我无法让它恢复工作。
PHP/HTML:
echo '<br><br>Add member:<br>'
. '<form method="post"><input type="text" name="username" oninput="findUsers(this.value)" list="livesearch">'
. '<datalist id="livesearch"></datalist>'
. '<input type="submit" value="Add">'
. '</form>';
JavaScript:
<script>
function findUsers(str) {
if (str == "") {
document.getElementById("livesearch").innerHTML = "no suggestions";
xmlhttp.send();
} else {
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;
}
};
xmlhttp.open("GET","/user/search/?q="+str,true);
xmlhttp.send();
}
}
</script>
/user/search 在 UserController.php 文件中的 User 类中打开一个名为 search 的函数
class UserController extends Controller
{
public function search()
{
$response = "hello";
echo $response;
}
}
所以这应该将“hello”消息放入 livesearch 数据列表中。 但由于某种原因,什么都没有发生。 如果我用 window.open 替换 xmlhttp.open,页面会正常加载并显示 hello 消息。但这显然不是我想要的。
找出确切的问题:
我的 xmlhttp.responseText 也返回了我的网站的标题,该标题已经加载到 MVC 结构中。
我将如何解决这个问题? 是否可以选择仅编辑字符串并获取 javascript 中的最后一部分? 还是有更好的解决方案?
【问题讨论】:
-
“不起作用”是什么意思?您是否遇到错误,或者您没有看到预期的结果?如果是后者,则可能是您的 xmlhttp.onreadystatechange 监听器有问题,这是什么样的?
-
它没有显示预期的结果
-
@hairraisin 更新了我的帖子
-
那么函数会被调用吗?状态不是 200 吗?
-
当我在状态检查中添加 else 时,我得到 3 个回复:0、200、200
标签: javascript php ajax model-view-controller