jquery-autocomplete:serviceUrl用于过滤lookupFilter()中显示的结果

时间:2015-02-22 22:18:24

标签: javascript php mysql jquery-autocomplete

我正在使用jQuery-Autocomplete库作为输入字段,而不是针对我想要使用的建议serviceUrl定位本地数据,它为脚本提供了带有文件列表的JSON文件。在图书馆作者提供的demo(第30-47行)中,我将lookup: countriesArray,替换为serviceUrl: 'retrieve_foreign_countries.php',

<?php // retrieve_foreign_countries.php

include 'init_db.php';
include 'functions.php';

prepareForeignCountriesJson($db);

?>

prepareForeignCountriesJson()定义为

function prepareForeignCountriesJson($db) {

  $sql = 'SELECT country_code AS code, country_name AS value FROM foreign_country ORDER BY value;';
  $stmt = $db->prepare($sql);
  $stmt->execute();
  $result = $stmt->fetchAll(PDO::FETCH_ASSOC);

  echo "{\"query\": \"Unit\", \"suggestions\": ".json_encode($result)."}";

}

输入某些文本时的查找工作正常但不会根据输入文本过滤结果,而是提供整个国家/地区列表。换句话说,该功能(在demo第34-37行)

 lookupFilter: function(suggestion, originalQuery, queryLowerCase) {
var re = new RegExp('\\b' + $.Autocomplete.utils.escapeRegExChars(queryLowerCase), 'gi');
return re.test(suggestion.value);
},
如图书馆作者(here

所解释的那样,

没有启动

  

使用serviceUrl选项时,过滤器负责服务器   结果

然后,我在哪里开始使用serviceUrl获取与加载本地数据相同的结果?我是否需要过滤prepareForeignCountriesJson()中的查找数据?但是prepareForeignCountriesJson()被称为多少次?每次用户在字段中输入某个字符?

1 个答案:

答案 0 :(得分:0)

也许您的SELECT缺少WHERE子句:

$sql = "SELECT ... WHERE country_name LIKE CONCAT('$prefix', '%') ORDER BY ...";

(请注意,我更改为双引号,因此我可以&#39;插入&#39; $前缀。)