我在输入字段中使用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)."}";
}
输入某些文本时的查找效果很好,但BUT不会根据输入的文本过滤结果,而是提供了整个国家/地区列表。换句话说,该函数(在第34-37行的demo中)
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()
被调用了多少次?每次用户在字段中输入某个字符时? 最佳答案
也许您的SELECT缺少WHERE子句:
$sql = "SELECT ... WHERE country_name LIKE CONCAT('$prefix', '%') ORDER BY ...";
(请注意,我更改为双引号,以便可以“插入” $ prefix。)
关于javascript - jquery-autocomplete:serviceUrl过滤在lookupFilter()中显示的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28663986/