ajax autocomplete из массива

Я пытаюсь создать простой текстовый блок автозаполнения, который принимает предложения из массива. Код, который я использую (на основе этого ):

call.php

<?php $list = array( "Autocomplete", "Metapher", "Metatag"); for($i=0; $i<count($list); $i++){ if(strpos($list[$i], $_GET['str']) !== FALSE && strlen($_GET['str']) >= 2){ echo str_ireplace($_GET['str'], '<b style="color: red;">'.$_GET['str'].'</b>', $list[$i]) . '<br>'; } } ?> 

index.php

 <!DOCTYPE html> <html> <head> <title>AJAX - 03</title> <script type="text/javascript"> var ajax = new XMLHttpRequest; function t(){ ajax.open("GET", "call.php?str=" + document.getElementById("test").value, false); ajax.send(); ajax.onreadystatechange=function() { if (ajax.readyState==4 && ajax.status==200) { document.getElementById("container").innerHTML = ajax.responseText; } } } </script> </head> <body> <div id="container" style="border: 3px; border-style: solid; font-size: 42pt; border-radius: 7px;"> Text </div> <br><br> <input id="test" type="text" onkeyup="javascript:t()"> </body> </html> 

но ничего не появляется в окне предложений. Я не могу найти никаких синтаксических ошибок, поэтому я полагаю, что с логикой что-то не так?

ОБНОВЛЕНИЕ : после консультаций с PLB и FAngel я добавил onreadystatechange и checks.However, он все еще не работает правильно. Фактически я просто обнаружил, что если вы набираете состав букв, которые находятся внутри одного из трех слов, предложения появляются правильно. Это просто не работает, если вы вводите начальные буквы слова. Например, если я даю «com» ​​в качестве ввода, то появляется слово Autocomplete. Однако, если я дам «Aut», тогда ничего. Так что я думаю, что фактическая проблема здесь :

 if(**strpos($list[$i], $_GET['str']) !== FALSE** && strlen($_GET['str']) >= 2) 

Из того, что я читал здесь, http://php.net/manual/en/function.strpos.php, проблема может быть использована! = Но я использую! == как я должен. Все мысли?

Related of "ajax autocomplete из массива"

Вам не хватает того, что ваш запрос является асинхронным. Поэтому, когда вы запускаете эту строку: document.getElementById("container").innerHTML = ajax.responseText; , запрос еще не завершен. Взгляните на это . onreadystatechange – это то, что вам нужно. Или сделайте этот вызов синхронным

Вы также можете работать так.

http://jsfiddle.net/qz29K/

Все, что вам нужно, это просто заменить json-массив на php jsonencoding следующим образом:

 $list = array( "Autocomplete", "Metapher", "Metatag"); <script> var availableTags = <?php echo json_encode($list) ?> </script> 

Надеюсь, это поможет.

Он полностью РАБОТАЕТ!

Я попробовал.

У меня был вход: Met

и это дало мне метафору и еще одно слово.

Однако для расширенного использования. Проверьте это, вам понравится.

http://jqueryui.com/demos/autocomplete/