0

我对 jquery-ui 中的自动完成功能有疑问。我有

var availableTags = [ "ActionScript", "AppleScript", "Asp"];

我想从具有数千条记录的 mysql 表中获取。

$( "#find" ).autocomplete({ source: availableTags });

喜欢

$( "#find" ).autocomplete({ source: availableTags }, $('#find').value());

??

如何放置自动完成功能,它会在接收到 availableTags 之前发送一个搜索短语。我不想在每次按键后挖掘整个桌子。复杂度太高。

谢谢

4

2 回答 2

1

如果您想使用基本的 JQuery,您可以查看远程数据源示例中的 示例http://jqueryui.com/autocomplete/#remote

你可以看到:

$( "#birds" ).autocomplete({
            source: "search.php",
            minLength: 2,
            select: function( event, ui ) {
                log( ui.item ?
                    "Selected: " + ui.item.value + " aka " + ui.item.id :
                    "Nothing selected, input was " + this.value );
            }
        });

minlenght 是您可以输入以开始研究的最小字母。

在服务器端,您必须创建类似

//connect to your database

$term = trim(strip_tags($_GET['term']));//retrieve the search term that autocomplete sends only when there are 2 char or more

$qstring = "SELECT description as value,id FROM test WHERE description LIKE '%".$term."%'"; //ONLY AN EXAMPLE
$result = mysql_query($qstring);//query the database for entries containing the term

while ($row = mysql_fetch_array($result,MYSQL_ASSOC))//loop through the retrieved values
{
        $row['value']=htmlentities(stripslashes($row['value']));
        $row['id']=(int)$row['id'];
        $row_set[] = $row;//build an array
}
echo json_encode($row_set);//format the array into json data

如果您不在跨域上,则需要输入类似 JSON 的内容(在跨域上,您需要 JSONP,但这是另一回事)

[{"value":"Some Name","id":1},{"value":"Some Othername","id":2}]

最糟糕的做法 另一种解决方案(但在逻辑上不可行)是在记录集上使用循环创建整个 JS 数组,生成类似的字符串。

var availableTags = [ "ActionScript", "AppleScript", "Asp",...];

所以你的表格在页面中是硬编码和不可变的,但是每个数据都暴露在页面的源代码中,这只是为了学习目的,但永远不要在生产中这样做。


如果您不想以替代模式挖掘表格,则需要指定您不会如何挖掘,但自动完成基于 2 个想法。1)每个按键都有助于做出更好的限制,因此每次按键都需要进行另一个查询

2)当按下新键时,最后一个结果并不重要,所以最后一个请求被放弃。

因此,在某些情况下,当键入的键很少时,您可以在查询中使用动态限制,您可以将结果限制为有限的记录数量,当键入的序列增长时,您可以移除限制或限制为大量记录因为当时的条件使它的工作更好。


我希望有用

于 2012-11-25T10:59:21.300 回答
0

您将需要调用一个 Web 服务,该服务会为您进行查找。然后,您可以利用服务器端语言/ORM 的任何功能或使搜索过程高效的任何功能。

于 2012-11-25T10:34:28.053 回答