2014-02-14 69 views
3

我試圖使用typeahead.js使用自定義源(遠程),並且在正常工作時遇到了一些問題。如果我對數據進行硬編碼,事情會正常工作,但是當我嘗試實現對遠程服務的調用時,該調用從不會被調用,因此從不檢索數據來填充預先輸入。使用typeahead.js實現自定義源時遇到問題

下面的代碼:

var places = function(query, cb){ 
    $.getJSON({ 
     url: "https://api.foursquare.com/v2/venues/search?v=20120321&intent=global&query=%QUERY&client_id="+App.fs.client_id+"&client_secret="+App.fs.client_secret,   
     success: function(results){ 
      cb(results.response.venues); 
     }, 
     error: function(){ 
      console.log("error"); 
     } 
    }); 
}; 

$("#search").typeahead({ 
     highlight: true 
    }, 
    { 
     name: "Places", 
     displayKey: "name", 
     source: places 
    } 
); 

如果我創建一個名爲results一個對象,並手動結構中的數據,並傳遞至cb,一切工作正常。但是,通過這種實現,$.getJSON甚至從未被調用過。我錯過了什麼?

謝謝!

+0

林猜測鏈接工作不正常。您是否嘗試過手動檢查鏈接是否返回JSON數據? – rockStar

回答

0

請注意,使用typeahead.js您不必手動加載數據。使用預取URL會搶在頁面加載數據,然後保存在localStorage的

$('#input').typeahead([ 
{ 
    name: 'places', 
    prefetch: four_square_url_query, 
} 
]); 

是在你的例子不是「地方」的功能?什麼:

var places; 
$.getJSON({ 
     url: fsquare_query,   
     success: function(results){ 
      places = results.response.venues; 
     }, 
     error: function(){ 
      console.log("error"); 
     } 
    }); 

我相信最近的typeahead沒有「源」屬性,而是它有「本地」。

0

我想你可以用這種方式

var search = $("#search").typeahead({ 
    highlight: true, 
    source: [] 
}; 

現在你可以使用asyncrouniuous請求從服務器

$.getJSON({ 
    url: "https://api.foursquare.com/v2/venues/search?v=20120321&intent=global&query=%QUERY&client_id="+App.fs.client_id+"&client_secret="+App.fs.client_secret,   
    success: function(results){ 
     // some logic to filter, process results from server 
     // now you can directly update typeahead source 
     search.data('typeahead').source = results; 
    }, 
    error: function(){ 
     console.log("error"); 
    } 
}); 

獲取數據做也讀thisthis discussion

我還喜歡selectize.js庫,它有豐富的API,try it

1

事實證明,問題出在我如何實施$.getJSON。我認爲該功能的簽名是選項的散列,但它不是,它實際上是(url, [data], [success])。將它改爲正確的簽名可以使事情順利進行。

感謝您的所有快速回復!

相關問題