2012-05-23 37 views
1

工作,我已经得到了6000加用户名,我已经从MySQL拉到一个这样的数组:jQuery的自动完成不与大阵

$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。

回答

1

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

您应该通过限制可能性来减少结果。你可以通过提高你的最小字符至少3-4。另外,你应该对你的结果集做一点缓存,而不是让jQuery重新解析它的每一个条目。例如,我搜索了ad。我应该在关键字ad下存储对象结果。

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

再次ad自动完成查询时,应该寻找在高速缓存中的关键第一,如果存在返回结果。你应该有一个缓存逻辑来避免陈旧的数据。 Afaik,jQuery在自动完成中有简单的缓存演示。

0

我找回您同样的问题...你可以使用使用,而不是所有的阵列自动完成,由另一个脚本creted一部分..是这样的:

$('#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);