0

我正在尝试构建一个简单的自动完成功能。

%like%我的第一个意图是每次用户在 中添加或删除字符时使用语句查询特定数据库<input>,然后显示结果。

但是我想通过例如获取 JSON 然后使用它来防止这种大量的数据库使用。

如何使该 JSON 文件可用于我的 jQuery 脚本?

4

2 回答 2

2

您可以通过执行查询、使用 编码值json_encode()、然后在 JavaScript 块中打印 HTML 中的值来完成此操作,à la:

<script type="text/javascript">
<?php

    echo 'var json_values = \'' . $json_encoded_values . '\'';

?>
</script>

...这将允许您json_values按照您认为适合您的脚本的方式使用。

然而,在你走这条路之前,我建议你研究一下jQuery UI 的 Autocomplete API;它会在用户输入时更智能/更有效地搜索项目(适当的停顿等) - 而不是每次用户更改字段时都进行查询。

即使经常查询,一个简单的查询似乎也不可能给您的数据库LIKE增加那么多开销。

于 2013-06-18T13:41:23.073 回答
2

当您知道自动完成查找的结果不应该每次都改变时,您可以将结果缓存到一个对象中,如 jQuery UI自动完成演示页面中所述:

$(function () {
    var cache = {};
    $("#birds").autocomplete({
        minLength: 2,
        source: function (request, response) {
            var term = request.term;
            if (term in cache) {
                response(cache[term]);
                return;
            }
            $.getJSON("search.php", request, function (data, status, xhr) {
                cache[term] = data;
                response(data);
            });
        }
    });
});

不过,听起来您想在用户开始输入任何内容之前预先加载完整的 JSON 结果。在这种情况下,只需在页面首次加载时像这样预先加载 JSON 对象:

$.getJSON("search.php", request, function (data, status, xhr) {
    cache[term] = data;
    response(data);
});

然后使用本地对象(上例中的“缓存”)作为自动完成查找的源(请参阅那里的主要选项的默认自定义显示自动完成演示),例如,如下所示:

$("#autocompleteInput").autocomplete({
    source: cache
});
于 2013-06-18T13:45:46.003 回答