2

次のコード スニペットを使用して、フォースクエア会場に先行入力を提供するために、javascript を介して Twitter ブートストラップの先行入力を使用しています。

 function addLocationTypeaheadHandler() {
    $('input#location').keyup(function() {callFoursquareForTypeahead()});
}

function callFoursquareForTypeahead() {
    var inputQuery = $('input#location').val();
    if (inputQuery.length == 3) {
        $('input#location').typeahead({
                source: function(query, process) {
                    var urlString = "https://api.foursquare.com/v2/venues/suggestcompletion?ll=" + $('#latitude-field').val() + "," + $('#longitude-field').val() +
                       "&radius=1000&client_id=" + clientid + "&client_secret=" + clientsec;
                    return $.get(urlString, {query: $('input#location').val()},
                        function(json) {
                            venueNames = [];
                            $.each(json.response.minivenues, function(index,value) {
                                venueNames.push(value.name);
                            });
                            return process(venueNames);
                        }
                    );
                }
        });
    }
}

現在は機能していますが、クエリを変更するたびに表示されるネットワーク リクエストには、foursquare への新しい XHR リクエストがあります。inputQueryの長さ条件付きの(それほどエレガントではない)keyupイベントを使用してそれらを最小化しようとしましたが、まだ呼び出されています。

これらのリクエストを最小限に抑える方法があるかどうか知りたい

4

1 に答える 1

1

パーティーには遅れたかもしれませんが、Typeahead の新しいバージョンがここで役立つようです。

新しいバージョンには、 Remote data sourcesの概念に組み込まれている rateLimitWait があり、先行入力が試行する各呼び出し間のミリ秒数を制限できます。

では、入力フィールドの変更をすべて単独でリッスンできると述べているため、キーアップにバインドする必要もないようです。これにより、レート制限を回避する可能性のある二重バインディングを回避できます。

于 2013-07-15T19:08:58.660 に答える