3

POST リクエストのみを受け取るサーバー側のページがあるため、Bloodhound のリモート プロパティで jquery ajax セットアップを使用する必要があります。すべてが機能しますが、一度だけです。その後、先行入力ボックスのテキストが変更されると、フィルタ関数が呼び出されますが、新しいデータを取得するための新しいサーバー側要求は起動されません。最初のリクエストで取得したデータをフィルタリングするだけです。ユーザーがテキストを削除して別のものを入力すると、新しいリクエストを作成する必要があります。

私はタイプアヘッドが初めてで、これを理解するのに多くの時間を費やしています。これが私のコードです。

var users = new Bloodhound({
        datumTokenizer: function (d) {
            return Bloodhound.tokenizers.whitespace(d.value);
        },
        queryTokenizer: Bloodhound.tokenizers.whitespace,
        remote:   {
            url: 'fake.jsp',
            filter: function (users) {
                return $.map(users, function (user) {
                    return {
                        value: user.USER_ID,
                        name: user.DISPLAYNAME
                    };
                });
            },
            ajax: {
                type: 'POST',
                data: {
                    param: function(){
                        return $('#userid').val();
                    }
                },
                context: this
            }
        }
    });
    users.initialize(true);

    $('#userid').typeahead({
          minLength: 3,
          highlight: true
        }, {
          name: 'userslist',
          displayKey: 'name',
          source: users.ttAdapter()
    });
4

2 に答える 2

2

私は同じ解決策を持っていましたが、何らかの理由でこの状況ではjQueryのcache: false;オプションが機能しないことを発見しました。これが私が見つけた解決策です:

   remote: {
        url: ...
        replace: function(url, query) {
            return url + "#" + query; // used to prevent the data from being cached. New requests aren't made without this (cache: false setting in ajax settings doesn't work)
        }
    }
于 2014-07-13T21:24:10.903 に答える
0

これを試して:

   remote:   {
               url: 'fake.jsp/?' + Math.random(),
   .
   .
   .

それは実際には解決策ではありませんが、少なくともページが更新されるたびにサーバーから結果が取得されます。

于 2014-09-09T17:07:23.470 に答える