无法获取目标文件Typeahead.js中的值

时间:2018-12-06 08:52:44

标签: javascript php jquery typeahead.js

我已经编写了一些脚本来自动填充搜索输入(来自数据库的搜索数据),并与查询一起在远程url中发送一些动态变量以进行高级搜索。

但是我没有在目标文件中接收到任何数据,如果仅在“远程”中发送查询,则其工作正常,但与远程url中的动态变量一起工作,则无效!请检查我的代码并指导我哪里做错了

<script src="typeahead.min.js"></script>
   <script>
$(document).ready(function(){
$('input.typeahead').typeahead({
    name: 'typeahead',
    //remote:'subtasksearch.php?key=%QUERY',
    //remote:'subtasksearch.php?key=%QUERY&&mani=123',
    remote: {
    url: 'subtasksearch.php?key=%QUERY&&mani=',
    replace: function () {
        var q = 'subtasksearch.php?key=%QUERY&&mani=';
        if ($('#country').val()) {
            q += encodeURIComponent($('#country').val());
        }
        return q;
      }
    },
    limit : 10
});
 });
</script>

我的subtasksearch.php是

<?php
$key=$_GET['key'];
$mani=$_GET['mani'];
$array = array();
$con=mysqli_connect("localhost","","","");

if (mysqli_connect_errno())
 {
   echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }


$query=mysqli_query($con, "select * from sub_task where name LIKE '%{$key}%'");
while($row=mysqli_fetch_assoc($query))
{
  $array[] = $row['name'];
  //$array[] = $mani;
}
echo json_encode($array);

我的搜索输入是

 <input type="text" name="typeahead" class="typeahead tt-query" autocomplete="off" spellcheck="false" placeholder="Type your Task" required="">

如果您使用简单的远程方法来发送查询,则其工作正常

remote:'subtasksearch.php?key=%QUERY',
//or
remote:'subtasksearch.php?key=%QUERY&&mani=123',

由于远程url中的动态变量不起作用,我在控制台中观察到一些数据正在URL中传递并返回空数组的情况,我想请检查一下波纹图像

console image

请指导我我错了!我是用错误的方式发送值吗?

1 个答案:

答案 0 :(得分:0)

我认为问题在于如何发送查询变量-您正在发送原义%QUER而不是实际查询值。

url: 'subtasksearch.php?key=%QUERY&&mani=',

应该包含变量

url: 'subtasksearch.php?key='+QUERY+'&&mani=',

不确定预先输入的插件,但是也许this.val()足以获取值,例如:

url: 'subtasksearch.php?key='+this.val()+'&mani=',

此外,请考虑使用预处理语句来修补注入风险(即使在MySQLI中也是如此):How can I prevent SQL injection in PHP?

更新

因此,查看您使用的实际插件,您似乎需要为建议框配置Bloodhound,而不仅仅是单独进行预先输入。这意味着包括Bloodhound javascript源或使用捆绑软件。

<script src="http://twitter.github.com/typeahead.js/releases/latest/typeahead.bundle.min.js"> </script>
<script> 
var tasks = new Bloodhound({
    remote: {
        url: 'subtasksearch.php?key=%QUERY.json',
        wildcard: '%QUERY'
    }
});

$('input.typeahead').typeahead({
    name: 'typeahead',
    source: tasks,
    limit: 10
  });
 </script>

第二次更新

我不确定Bloodhound在屏幕后面的作用是什么,它是否允许您像这样构造查询:

var country = $('#country').val()
var tasks = new Bloodhound({
    remote: {
        url: 'subtasksearch.php?key=%QUERY.json'+'&country='+country,
        wildcard: '%QUERY'
    }
});