2016-05-18 48 views
0

請注意,這是一個Rails應用程序。我一直在努力尋找從json文件中提取數據的最佳方式,而我似乎無法在任何地方找到我想要做的事情的答案。我有靜態數據的列表,像這樣(這就像8000線長的列表):Rails/JSON:如何使用JSON的jQuery UI自動完成形式

[ 
    {"web_page": "http://www.usjc.uwaterloo.ca/", "country": "Canada", "domain": "usjc.uwaterloo.ca", "name": "University of St. Jerome's College"}, 
    {"web_page": "http://www.ustanne.ednet.ns.ca/", "country": "Canada", "domain": "ustanne.ednet.ns.ca", "name": "St. Anne University"} 
    ] 

^^我救了上述我的應用程序/資產/ JavaScript的文件夾universitydata.json

而且我的javascript:

function updateUniSearch() { 
     $("#university-field").autocomplete({ 
       source: universitydata 
      }); 
    }   

這裏是嵌入的Ruby文件,其中我對updateUniSearch()函數的事件爲上的keydown:

<%= f.text_field :university, :id => "university-field", :onkeydown=>"updateUniSearch()" %> 

所以,比方說,我定義universitydata如下所示:

var universitydata = ["Maine", "Harvard"]; 

然後我去鍵入自動完成表單「M'」緬因」將作爲選項出現。但在這個文件中,我保存爲我的JavaScript資源文件夾中的universitydata.json,沒有任何反應。我是否設置了所有錯誤?我是否不正確地保存這個json文件?爲什麼它只適用於本地數組?先謝謝你。

回答

1

有幾件事情:

大多數自動完成庫要求,你只「綁定」到輸入一次。根據你的堆棧溢出帖子,你可以在onkeydown事件中發生。所以每次打字時,都要重新輸入。

考慮,而不是:

$(document).on('ready', function(){ 
    $("#university-field").autocomplete({ 
    source: universitydata 
    }); 
}); 

這將會自動完成綁定只有一次(在頁面加載)

其次,並回答您的主要問題,如果你想從文件加載JSON數據,你必須發出一個AJAX請求才能將它加載到一個變量中。鑑於數據是靜態的,而且數據集相對較小,因此在綁定自動完成器之前將它作爲變量加載是非常好的。把所有這些(數據,並自動完成的事件綁定)在.js文件,並使用

<script src="/your-path-to-the-javascript.js"></script> 

第三,javascipt的約定建議蛇的情況下爲變量名,所以考慮命名您的變量universityData