我正在尝试构建一个简单的自动完成功能。
%like%
我的第一个意图是每次用户在 中添加或删除字符时使用语句查询特定数据库<input>
,然后显示结果。
但是我想通过例如获取 JSON 然后使用它来防止这种大量的数据库使用。
如何使该 JSON 文件可用于我的 jQuery 脚本?
我正在尝试构建一个简单的自动完成功能。
%like%
我的第一个意图是每次用户在 中添加或删除字符时使用语句查询特定数据库<input>
,然后显示结果。
但是我想通过例如获取 JSON 然后使用它来防止这种大量的数据库使用。
如何使该 JSON 文件可用于我的 jQuery 脚本?
您可以通过执行查询、使用 编码值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
增加那么多开销。
当您知道自动完成查找的结果不应该每次都改变时,您可以将结果缓存到一个对象中,如 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
});