所以我试图从数据库中填充一个自动完成的搜索表单。这是我的php代码,它创建了一个数组
$leaders= mysql_query("SELECT model_name,model_id FROM models
ORDER by model_name DESC");
while($leader=mysql_fetch_array($leaders)){
$model= $leader['model_name'];
$modelid= $leader['model_id'];
$name[] = array('label'=> $model, 'value'=> $modelid);
$count = $count + 1;
}
$fp = fopen('results.php', 'w');
fwrite($fp, json_encode($name));
fclose($fp);
我的问题在于jquery自动完成中的某个地方,搜索表单只是返回json中所有产品的巨大列表,而没有在用户键入时进行过滤。我的理想目标是将值分配给url的末尾。Ex."http://www.example.com/"+值
$(function() {
$("#search").autocomplete({
source: function(request, response) {
$.ajax({
url: "results.php",
dataType: "json",
data: { q: request.term },
success: function(data) {
response($.map(data, function(value,key) {
return { label:value.label , value: value.value }
}));
}
});
},
minLength: 2
});
});
感谢的帮助
我认为您的查询很糟糕。您必须在查询中使用类似条件
mysql_query("SELECT model_name,model_id FROM models where model_name like '$_post[q]%' ORDER by model_name DESC")
以获取特定的选定结果
正如arxanas所说,在对结果进行编码并将其发送回客户端之前,似乎需要对结果进行过滤。
其中一个例子可以是首先捕获jquery自动完成发送到服务器的术语,就像一样
$term = $_GET['term'];
然后用这个和你的名字数组进行比较,我想如果你把这个词变成一个像这样的模式
$term = "/$term/i"
然后创建一个数组来存储匹配的结果,并使用preg_match在names数组上循环,每次匹配模式时,只需将值推送到返回数组中
$returnArray = array();
foreach( $name as $index => $value ) {
if ( preg_match( $term, $value['label'] ) {
array_push($returnArray, $value);
};
};
return json_encode($returnArray);
就像我说的,我认为这会奏效,但赛前比赛很慢,我自己还没有测试过,祝你好运!