2

配列から提案を取得する単純なオートコンプリート テキスト ボックスを作成しようとしています。私が使用しているコード (これに基づいて)は次のとおりです。

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 とチェックを追加しました。たとえば、入力として「com」を入力すると、オートコンプリートという単語が表示されます。ただし、「Aut」を入力すると何も表示されません。実際の問題はここにあると思います:

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

私がここで読んだことからhttp://php.net/manual/en/function.strpos.php問題は != の使用である可能性がありますが、私は !== を使用する必要があります。

4

3 に答える 3

2

このように加工することもできます。

http://jsfiddle.net/qz29K/

必要なのは、このように json 配列を php jsonencoding に置き換えるだけです

$list = array(
"Autocomplete",
"Metapher",
"Metatag");

<script>
var availableTags = <?php echo json_encode($list) ?>
</script>

これが役立つことを願っています。

于 2012-08-22T13:45:27.383 に答える
2

リクエストが非同期であることを見逃しています。したがって、次の行を実行すると: document.getElementById("container").innerHTML = ajax.responseText;、リクエストはまだ完了していません。これを見てください。onreadystatechange必要なものです。またはその呼び出しを同期させる

于 2012-08-22T12:21:10.043 に答える
1

それは完全に機能します!

私はそれを試してみました。

私は入力しました:会った

それは私に比喩ともう一つの言葉を与えました。

ただし、上級者向け。これをチェックしてください、きっと気に入るはずです。

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

于 2012-08-22T12:18:11.977 に答える