我正在我的页面中实现实时搜索功能。我有以下简化的 sinatra 控制器
get '/search_item/:for' do
//do some search stuff
haml :search_item,:layout => (request.xhr? ? false : :layout),
:locals => { :found_items => queried_items,
:current_user => current_user,
}
end
然后我有一个带有输入字段的 layout.haml 文件
%input(type="text" id="search_query" name="search_query" size="15" value="")
和两个 div
#content
= yield
#results(style="display=none")
现在开始我的问题我需要一个 jquery/javascript 函数来发送 xhr 或 json 请求,使用 sinatra 控制器中的输入生成 search_item 视图,然后应该在布局#results div 中呈现/加载该视图而不刷新整个页面. 现在我有类似的东西:
:javascript
$(function() {
$("#search_query").keyup(function(){
var q = $("#search_query").val();
if(q != ""){
----------- this is the problem part -------------
$.get('/search_item/'+q, function(data) {
$('#results').html(data);})
--------------------------------------------------
$("#content").css("display","none");
$("#results").css("display","inline");
}
else{
$("#content").css("display","inline");
$("#results").css("display","none");
}}); });
有没有办法像这样简单地将路由的haml视图加载到div中
var url = "/search_item/"+q;
$('#results').load(url);
我试过了,但它不起作用..
我没有使用导轨!所以我有三个问题:
- 如何正确地将 keyup 请求发送到 sinatra 以及如何在那里使用它?
- 那么如何在不刷新的情况下将 search_item.haml 渲染到 layout.haml #results div 中。
- 有没有更优雅的方法来做到这一点?
非常感谢您的帮助!