我在输入字段中使用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/

10-11 03:06