我尝试使用jQuery自动填充功能在我的搜索表单上写字时显示我的新闻标题。
但是我有一个问题,当我在我的搜索输入中写入时没有任何内容出现。
我有我的header.php文件,我有这个脚本启动jQuery自动完成:
$(function(){
$('.j_autocomplete').autocomplete({
source: "search.php",
});
});
我的header.php中还有一个带搜索表单的菜单:
<nav id="menu">
<ul>
<li><a href="">Home</a></li>
.....
<li>
<form id="search">
<input name="search" class="j_autocomplete" type="text" placeholder="Search..." />
<button type="submit">Search</button>
</form>
</li>
</ul>
然后我有我的源码,这是我的search.php文件,我选择我的新闻标题显示在我的jQuery自动完成上:
<?php
$search= $_GET['term'];
$readNews = $pdo->prepare("SELECT * from news WHERE title LIKE ? ORDER BY title ASC");
$readNews->bindValue(1, "%$search%", PDO::PARAM_STR);
$readNews->execute();
$resJson = '[';
$first = true;
while($res = $readNews->fetch(PDO::FETCH_ASSOC))
{
if(!$first)
{
$resJson .= ', ';
}
else
{
$first = false;
}
$resJson .= json_encode($res['title']);
}
$resJson .= ']';
echo $resJson;
?>
对我来说一切都很好,如果在我的search.php文件中我只在下面放了这个代码,当我开始写自动完成时,我得到所有这四个名字, 所以看来我的来源也是正确的:
<?php
$result = array("Henry","Tom","Terry","Chris");
echo json_encode($result);
?>
你看到我的错误可能在哪里吗?
在自动填充文档中说“&#39; term&#39;是查询字符串键,但是
我怀疑这是我的$_GET['term']
无法正常工作,但我已经用$_REQUEST['term']
进行了测试,但也没有用!
答案 0 :(得分:1)
修改强> 经过数小时的调试和结构更改后,我们终于开始工作了。
问题是.htaccess重写和前面代码中的一些小错误。
我不确定如何描述我们为使其发挥作用所做的一切。
-
尝试构建更健壮的json字符串。
$data = array();
while($res = $readNews>fetch(PDO::FETCH_ASSOC))
{
$data[] = $res['title'];
}
echo json_encode($data);
编辑: 要检查未定义的索引,请
$search = isset($_GET['term']) ? $_GET['term'] : "";
答案 1 :(得分:0)
我很同情你的困境 - 大约一年前,我处于同样的混乱状态,然后我在这里得到了很多帮助。
我自动完成的所有错误都是因为我没有向自动完成功能提供真正的json文件。所以我了解到,对于您编写的每个PHP文件,将其作为独立运行,获取屏幕输出,并使用jsonlint进行测试。
我教的第二件事是,如果你首先用你的php调用整个文件,然后将它呈现给自动完成功能,那么它可能更容易(如果你没有太多的变量可读)。一旦我开始执行这两个步骤,我就没有发生过重大故障。希望它可以帮到你。
JS
$(function(){
$.ajax ({
url: "../php/insurancesinglevarjson.php",
dataType: "json"
})
.done(function (data) {
console.dir(data);
var source = data;
$("#companyname").autocomplete({
source: source});
});
});