2012-12-14 65 views
2

我使用Twitter的引導的預輸入通過JavaScript提供使用此代碼片段方正場館預輸入:限制Ajax的請求到Foursquare的suggestcompletion

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 length條件使用(不那麼優雅)的keyup事件來最小化它們,但它仍然被調用。

我想知道是否有有辦法,以儘量減少這些請求

回答

1

遲到了,也許,但它看起來像the new version of Typeahead將幫助你在這裏。

新版本內置了Remote data sources的概念,它包含一個rateLimitWait,它允許您限制每次調用之間ms的數目,

它看起來並不像你需要將它綁定到keyup上,因爲它可以單獨監聽輸入字段中的更改the examples say。這將幫助您避免雙重綁定,從而避免限制您的速度。