2

我通过 javascript 使用 Twitter bootstrap 的 typeahead 来使用以下代码片段为foursquare场地提供 typeahead :

 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);
                        }
                    );
                }
        });
    }
}

它目前可以工作,但在我的网络请求中,每次我更改查询时,我都会看到一个新的 XHR 请求到foursquare。我尝试使用带有 inputQuery 长度条件的(不太优雅的)keyup 事件来最小化它们,但它仍然被调用。

我想知道是否有办法最小化这些请求

4

1 回答 1

1

也许迟到了,但看起来新版本的 Typeahead会在这里帮助你。

新版本在其远程数据源的概念中内置了一个 rateLimitWait,它允许您限制 typeahead 尝试进行的每次调用之间的毫秒数。

它看起来也不需要将它绑定到 keyup,因为示例说它可以自己监听输入字段中的变化。这将帮助您避免可能最终绕过您的速率限制的双重绑定。

于 2013-07-15T19:08:58.660 回答