0

オートコンプリートのソースを取得する関数を呼び出しています。私のjquery関数はコントローラーを呼び出し、コントローラーはメソッドを呼び出し、メソッドはwcfサービスを呼び出します。私の wcf サービスは、アドレスのリストを返します。ユーザーがオートコンプリートテキストボックスを使用するたびにサービスを呼び出さないようにするために、(ユーザーがビューに残っている間) 最初の呼び出しでアドレスのリストを保存する方法があるかどうかを知りたいです。私は静的リストでそれをやろうとしましたが、データベース上のアドレスのリストは変更される可能性があり、再ロードする必要があります (少なくともユーザーがビューに移動したときの最初の呼び出しで)。これが私のコードです。

オートコンプリート:

    $(function () {
        var availableTags = {                
            source: '/Address/GetAddresses/',
            minLength: 4,
            }            
        $("input.Places").live("keydown.autocomplete", function () {
            $(this).autocomplete(availableTags);
        });
    });

コントローラ:

    public ActionResult GetAddresses(string term)
    {
        var filteredItems = City.GetFilteredAddresses(term);
        return Json(filteredItems, JsonRequestBehavior.AllowGet);
    }

方法:

    public static IEnumerable<string> GetFilteredAddresses(string term)
    {
        var items = AddressesService(); This method call a wcf service and return the list of addresses
        var filteredItems = items.Where(
            item => item.IndexOf(term, StringComparison.InvariantCultureIgnoreCase) >= 0
            );
        return filteredItems;
    }
4

3 に答える 3

0

コールバックを使用して、結果をローカルにキャッシュするだけです。

次のリンクから: jQuery UI Autocomplete と Caching Query Results

変数キャッシュ = {};
$("#birds").autocomplete({
  ソース: 関数 (リクエスト、レスポンス) {
      if (cache.term == request.term && cache.content) {
          応答 (cache.content);
          戻る;
      }
      if (新しい RegExp(cache.term).test(request.term) && cache.content && cache.content.length
于 2013-09-13T17:21:12.527 に答える
0

皮肉なことに、アドレスのリストを取得してグローバル変数に保存する新しい関数を作成しました。コードは次のとおりです。

    var list;
    $(document).ready(function () {
        $.ajax({
            url: '/Address/GetListAddresses/',
            dataType: "json",
            success: function (data) {
                list = data;
            }
        });
    });

オートコンプリート

$(function () {
        var availableTags = {
            source: function (request, response) {
                response($.ui.autocomplete.filter(list, request.term));
            },
            minLength: 4,
        }                        
        $("input.Places").live("keydown.autocomplete", function () {
            $(this).autocomplete(availableTags);
        });
    });
于 2013-09-13T19:42:32.587 に答える