【问题标题】:Jquery autocomplete not working with large arrayJquery自动完成不适用于大型数组
【发布时间】:2012-05-30 06:59:33
【问题描述】:

我有一个包含 6000 多个用户名的数组,我从 MySQL 中提取这些用户名,如下所示:

$pop = mysql_query("SELECT * FROM import_student");
while ($r = mysql_fetch_assoc($pop)) {
 $student_array[] = $r['studentfirstname']." ".$r['studentlastname'];
}

    $big_array = json_encode($student_array); 

然后我将这个数组传递给 JS 并像这样初始化我的自动完成功能。

<script>
$(document).ready(function() {
var availableTags = <?php echo $big_array; ?>;
console.log(availableTags);
    $( "#tags" ).autocomplete({
            source: availableTags
        });
});
</script>

当我将 SQL 结果限制为 0,10 时,这很有效,但是当我不限制并且我将 6000 个左右的用户名放入数组时,自动完成功能不起作用。我在萤火虫中得到这个错误:

value is null 

return matcher.test( value.label || value.value || value );

有人知道我在这里做错了什么吗?就像我说的,这在我限制结果时有效。关于拥有一个大数组的东西? IDK。

【问题讨论】:

    标签: php jquery arrays autocomplete


    【解决方案1】:

    我之前测试过(1-2 个字母的一些 2k 项),它与解析以及将大型结果集呈现给 DOM 有关。

    您应该通过限制可能性来减少结果。您可以通过将最少字符数提高到至少 3-4 个来做到这一点。

    此外,您应该对结果集进行一些缓存,而不是让 jQuery 重新解析每个条目。例如,我搜索了ad。我应该将结果存储在键 ad 下的对象中。

    var cache = {
        'ad' : [...results...],
        'adder' : [...results...],
        ...and so on...
    }
    

    当自动完成再次查询ad时,它应该首先在缓存中搜索key,如果存在则返回结果。您应该有一个缓存逻辑来避免过时的数据。 Afaik,jQuery 在自动完成中有简单的缓存演示。

    【讨论】:

      【解决方案2】:

      我检索到你同样的问题......你可以使用自动完成而不是使用所有数组,一个由另一个脚本创建的部分......类似于:

      $('#tags').autocomplete({
              source : "aScript.php",
      };
      

      和 aScript.php:

      $autocompleteValue = $_GET["term"];
      $pop = mysql_query("SELECT * FROM import_student WHERE 'studentfirstname' LIKE '$autocompleteValue%'");
      while ($r = mysql_fetch_assoc($pop)) {
         $student_array[] = $r['studentfirstname']." ".$r['studentlastname'];
      }
      
      return json_encode($student_array); 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-13
        • 2019-08-10
        • 1970-01-01
        • 2018-10-19
        • 2020-05-05
        • 2016-03-21
        • 2015-08-05
        相关资源
        最近更新 更多