0

所以我试图从我的数据库中填充一个自动完成的搜索表单。这是我创建数组的 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 的末尾。前任。“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
  });
});

谢谢您的帮助

4

2 回答 2

0

我认为你的查询很糟糕。您必须在查询中使用类似条件

 mysql_query("SELECT model_name,model_id FROM models where model_name like '$_post[q]%'  ORDER by model_name DESC")

获取特定的选定结果

于 2012-07-20T17:21:07.277 回答
0

正如 arxanas 所说,您似乎需要在对结果进行编码并将其发送回客户端之前对其进行过滤。

这方面的一个示例可能是首先捕获 jquery 自动完成发送到服务器的术语,如下所示

$term = $_GET['term'];

然后用它来比较你的名字数组,我想如果你把术语变成这样的模式

$term = "/$term/i" 

然后创建一个数组来存储匹配的结果并使用 preg_match 循环遍历名称数组,每次匹配模式时,您只需将其值推入返回数组

$returnArray = array();

foreach( $name as $index => $value ) {
    if ( preg_match( $term, $value['label'] ) {
        array_push($returnArray, $value);
    };
};

return json_encode($returnArray);

就像我说的那样,我认为这会起作用,但是 preg_match 很慢而且我自己还没有测试过,所以祝你好运!

于 2012-08-02T15:37:24.920 回答