我的jQuery自动完成功能不起作用

时间:2014-05-28 23:07:04

标签: php jquery jquery-plugins autocomplete

我尝试使用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']进行了测试,但也没有用!

2 个答案:

答案 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});
                                                                               });
                       });