2012-05-23 38 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);