将Ajax请求限制为Foursquare建议完成

时间:2012-12-14 14:47:27

标签: javascript ajax jquery twitter-bootstrap foursquare

我正在使用Twitter bootstrap的typeahead通过javascript为foursquare场所提供使用此代码片段的预先输入:

 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请求。我试图使用(不那么优雅)的keyup事件最小化它们,并且inputQuery length是条件的,但它仍然被调用。

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

1 个答案:

答案 0 :(得分:1)

也许是晚会,但看起来the new version of Typeahead会帮助你。

新版本的Remote data sources概念中包含一个rateLimitWait,它允许您限制typeahead尝试进行的每次调用之间的ms数。

它似乎也不需要将它绑定到keyup,因为the examples say它可以自己监听输入字段中的更改。这将有助于您避免可能最终绕过速率限制的双重绑定。