使用 jQuery .autocomplete 检索项目将不起作用,也不会引发任何错误

Posted

技术标签:

【中文标题】使用 jQuery .autocomplete 检索项目将不起作用,也不会引发任何错误【英文标题】:Retrieving items with jQuery .autocomplete won't work, nor throw any error 【发布时间】:2018-10-03 15:51:20 【问题描述】:

我正在尝试使 .autocomplete 工作,由于某种原因它没有显示任何应有的项目,并且控制台没有显示任何错误。

这是我的页脚:

(jquery-3.3.1.min.js 和 jquery UI 1.12.1)

<script src="http://code.jquery.com/jquery-3.3.1.min.js"
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js" integrity="sha384-cs/chFZiN24E4KMATLdqdvsezGxaGsi4hLGOzlXwp5UZB1LY//20VyM2taTB4QvJ" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js" ></script>
<script src='//cdn.tinymce.com/4/tinymce.min.js'></script>
<script src="/js/tinymce.js"></script>
<script src="/js/autocompletar/autocompletar.js"></script>

这是我的 html 表单:

<div class="form-group ui-widget">
<label for="userName">Tags existentes</label>
<div class="input-group mb-2 mr-sm-2 mb-sm-0">
  <input type="tag" class="form-control" name="tag" id="tag" list="datalist">
</div>
  <div id="listado"></div>
</div>

这是我的 .js 文件

$(document).ready(function() 
    $( "#tag" ).autocomplete(
        source: 'autocompletarTags.php',
        appendTo: "#listado",
        minLength: 2
     );
);

我也试过了:

$(document).ready(function() 
    $(function()
    $( "#tag" ).autocomplete(
        source: 'autocompletarTags.php',
        appendTo: "#listado",
        minLength: 2
     );
    );
);

请注意文件 autocompletar.js 和 autocompletarTags.php 在同一个文件夹中。

//php function to connect to DB
conectar(); 

//get search term
$tag = $_GET['term'];

$tags = $tag.'%';

$x = $conectarDB->prepare("
  SELECT nombre FROM tags
  WHERE nombre LIKE ?
  ORDER BY nombre ASC
  ");
$x->bindParam(1, $tags);
$x->execute();

if ($row = $x->fetchAll(PDO::FETCH_ASSOC)) 
   foreach ($row as $value) 
        $data[] = $value['nombre'];
    


//return json data
echo json_encode($data);

$conectarDB = NULL;

关于为什么这不起作用的任何想法?我已经按照here 的说明进行操作,并且我认为我没有忘记任何步骤。

更新:每个js文件的网络面板状态为200。

UPDATE 2: json_encode($data) 的输出是[" tag2"," tag3"," tag4","demo","demo2","tag1"](其实是预期的结果)

另一个更新:当 JS 脚本嵌入到文件中时它可以工作。 我没有将它作为文件引用添加到最底部,而是将 JS 脚本粘贴到文件的最底部,现在它可以工作了。

我已经检查并且引用的文件确实出现在页面的最底部(我已经检查了页面的来源),所以为什么它只在内联时才有效?

【问题讨论】:

网络面板在说什么?它发出请求了吗?响应状态码是什么? 没想到要检查一下,对不起,我已经更新了问题。获得-1票和结束票的问题还有什么问题?我是 JS 的新手,我不认为无缘无故投票结束是件好事。我认为问题中提供的信息是完整的。 $connectar = function()//blah ?或者真的是function connectar()//blah。如果是第二种方式,删除$ 谢谢!多么愚蠢的错误。是的,它应该是 conectar()!谢谢。我已经改变了(我会更新问题,因为仍然不起作用) 你为什么使用JSON_HEX_APOS?你的$data 回报是什么? 【参考方案1】:

发现了问题,我将其发布在这里,以防将来对其他人有所帮助。

我的问题是我如何调用源代码。即使两个文件在同一个文件夹中,我也不应该只用文件名来调用它,而应该用文件夹来调用它。

所以,而不是:

source: 'autocompletarTags.php',

应该是:

source: '/my/folders/autocompletarTags.php',

【讨论】:

以上是关于使用 jQuery .autocomplete 检索项目将不起作用,也不会引发任何错误的主要内容,如果未能解决你的问题,请参考以下文章

ASP.Net MVC在AspNet Mvc使用JQuery AutoComplete组件

通过 rails3-jquery-autocomplete 使用多个输入字段

jsp关于jquery插件autocomplete的使用问题

如何使用 Jquery Autocomplete 填写表单值

ASP.NET MVC使用jQuery实现Autocomplete

在 jquery ui / autocomplete / source 中使用选择器