【问题标题】:Json autocomplete not working properlyJson 自动完成功能无法正常工作
【发布时间】:2012-07-20 17:07:09
【问题描述】:

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

感谢您的帮助

【问题讨论】:

  • 有没有实际的过滤代码?您可以在 SQL 查询中添加 LIMIT
  • 您为什么要写入不同的.php 文件?为什么不直接echo json_encode(..
  • 当您使用服务器端数据源时,负责进行过滤。自动完成小部件只是显示结果。
  • 有几千种产品,所以我不想减慢页面的加载时间。你能指出我如何让​​它发挥作用的正确方向吗?
  • MMK 的回答是一个很好的起点,您可以使用$_POST['term'] 处理 JQuery 的 Autocomplete 的 Ajax 请求发送的内容。关于您对写到不同的.php 文件的回复。什么?!

标签: php json jquery-ui jquery


【解决方案1】:

我认为您的查询已经过时了。您必须在查询中使用类似条件

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

获取特定的选定结果

【讨论】:

    【解决方案2】:

    正如 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 很慢而且我自己还没有测试过,所以祝你好运!

    【讨论】:

      猜你喜欢
      • 2020-10-12
      • 2014-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多