我正在尝试对表单上的关键字进行预先输入,并且我正在查看响应标头中的结果,并且它们返回整个表而不是返回缩小的结果 - 这导致它(我认为)在返回所有结果之前超时。我正在使用我从这两个网站找到的ajax信息的typeahead:1)http://www.webmaster-source.com和2)tatiyants.com
这是jQuery / javascript部分
$('#keyword').typeahead({
minLength: 1,
source: function (query, process) {
items = [];
map = {};
$.ajax({
type: 'post',
url: 'includes/php/get_info.php',
data: { type: 'keyword', q: query },
cache: false,
dataType: 'json',
success: function (data) {
$.each(data, function (i, product) {
map[product.keyword] = product;
items.push(product.keyword);
});
return process(items);
}
});
},
updater: function (item) {
if (jQuery.type(map[item]) !== 'undefined'){
//add previously used tag
$('#keywords').append('<div class="remove" item="'+item+'"><span class="tag">'+item+'</span><button type="button" class="close" item="'+item+'">×</button><input type="hidden" name="ci_keywords[]" value="'+item+'"></div>');
} else {
//add the new tag
$('#keywords').append('<div class="remove" item="'+item+'"><span class="tag">'+item+'</span><button type="button" class="close" item="'+item+'">×</button><input type="hidden" name="ci_keywords[]" value="'+item+'"></div>');
}
},
matcher: function (item) {
if (item.toLowerCase().indexOf(this.query.trim().toLowerCase()) != -1) {
return true;
}
},
sorter: function (items) {
items.unshift(this.query);
return items;
}
});
这是我的get_info.php
if(isset($_POST['type']) && $_POST['type'] == 'keyword') {
$keywords = $dbh->prepare("SELECT DISTINCT `keyword` FROM `ci_keywords` WHERE `keyword` LIKE ?");
$keywords->execute(array('%'.$_POST['query'].'%'));
$results = $keywords->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($results);
}
我页面上的html是:
<div class="control-group">
<label class="control-label" for="keyword">Keywords or Phrases</label>
<div class="controls">
<input class="span4" type="text" id="keyword" placeholder="Keywords" autocomplete="off">
<div id="keywords" class="clearfix"></div>
</div>
</div>
所以我的问题 - 为什么它返回整个列表而不是缩小我发送的搜索词呢?
答案 0 :(得分:3)
您发送的变量名称为q
:
data: { type: 'keyword', q: query },
您在PHP中检索的变量名称为query
:
$keywords->execute(array('%'.$_POST['query'].'%'));
启用错误报告可以帮助您避免此问题。
答案 1 :(得分:1)
问题在于使用PHP构建查询。您将搜索字词q
发送,但以query
形式访问。因此,将$_POST['query']
更新为$_POST['q']