1

最初に私のコード

   $(function() {
        var suggest;
        $("#guestname").keyup(function() {

            $.ajax({
                async: true,
                url: '../include/searchGuest.php',
                dataType: 'json', 
                data: 'searchTxt=' + $(this).val() + '&festival_id=<?php echo $festival_id;?>', 
                success: function(data) {
                    suggest = data;
                    get_autocomplete(suggest);
                }   
            });
        });
    });


    function get_autocomplete(suggest) {
      $("#guestname").autocomplete({
        minLength: 3,
        source: suggest
      });
    }

この jQuery 関数を使用して、ゲストのリストを取得します。ユーザーは入力フィールドに「John」などの名前を入力します。Ajax は、名前または姓のいずれかに「John」を含むゲストのデータベースを検索しています。同じスクリプト (PHP) で、["1234:John Doe","...","..."] のような JSON オブジェクトを作成します (数字はこのゲストの ID です。重要ではないと思いますが、それについて言及したいだけです)。次に、JSON を jQuery UI のオートコンプリート機能に渡します。

JSON の形式で結果を取得した後、すべてが FF と Chrome で正常に動作し、小さなウィンドウが入力フィールドの下に開き、すべての一致が表示されます。IE9では、まったく機能しないわけではありませんが、結果として完全なJSONオブジェクトを取得することはありません. また、ほとんどの場合、「Sullivan」のような姓を取得するには、「Sulliv」と一致するように名前全体を書く必要があります。FF では「Sul」と書くだけで十分です。

ゲスト データベースには、約 8.1k のエントリがあります。IE はそれほど大きな JSON を処理できませんか、それともスクリプトを改善する必要がありますか。IE と JSON または jQuery の共通の問題ですか?

4

1 に答える 1

0

オートコンプリート ウィジェットを一度初期化するだけで、sourceオプションを使用してサーバーでフィルタリングを実行できます。

$("#guestname").autocomplete({
    minLength: 3,
    source: function (request, response) {
        $.ajax({
            async: true,
            url: '../include/searchGuest.php',
            dataType: 'json', 
            data: 'searchTxt=' + request.term + '&festival_id=<?php echo $festival_id;?>', 
            success: function(data) {
                response(data)
            }   
        });        
    }
});
  • request.termユーザーが検索した用語です。
  • responseオートコンプリート候補で呼び出す必要があるコールバック関数です。
于 2012-06-01T12:20:25.743 に答える