我正在使用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 ),此后就不再启动
When using serviceUrl option, it is server responsibility to filter results.
那么,我从哪里开始使用我的 serviceUrl
获取与加载本地数据时相同的结果?我是否需要过滤 prepareForeignCountriesJson()
中的查找数据?但是调用了多少次 prepareForeignCountriesJson()
呢?每次用户在字段中输入一些字符时?
最佳答案
也许您的 SELECT 缺少 WHERE 子句:
$sql = "SELECT ... WHERE country_name LIKE CONCAT('$prefix', '%') ORDER BY ...";
(请注意,我更改为双引号,以便可以“插入”$前缀。)
关于javascript - jquery-autocomplete:serviceUrl来过滤lookupFilter()中显示的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28663986/