我正在尝试构建一个简单的自动完成功能。
我的第一个目的是每次用户在%like%
中添加或删除某个字符时,使用<input>
语句查询特定数据库,然后显示结果。
但我想通过提取JSON然后使用它来防止这种繁重的数据库使用。
我怎样才能将JSON文件提供给我的jQuery脚本?
答案 0 :(得分:3)
您可以通过执行查询,使用json_encode()
对值进行编码,然后在JavaScript块中打印HTML中的值来完成此操作,àla:
<script type="text/javascript">
<?php
echo 'var json_values = \'' . $json_encoded_values . '\'';
?>
</script>
...这将允许您根据自己的脚本使用json_values
。
然而,在你走这条路之前,我建议你研究一下jQuery UI's Autocomplete API;当用户输入时(通过适当的暂停等),它将更智能/更有效地搜索项目 - 而不是每次用户更改字段时都进行查询。
即使经常查询,简单的LIKE
查询似乎也不太可能为数据库添加 很多开销。
答案 1 :(得分:3)
当您知道自动完成查找的结果不应每次都更改时,您可以按照jQuery UI Autocomplete demo page中所述将结果缓存到对象中:
$(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);
});
然后使用本地对象(&#34;缓存&#34;在上面的示例中)作为自动填充查找的来源(请参阅主要选项的default和custom display自动完成演示那里),例如,像这样:
$("#autocompleteInput").autocomplete({
source: cache
});