Jquery 通过Sinatra控制器根据Ajax请求将haml视图加载到布局中
我正在我的页面中实现实时搜索功能。。我有以下简化的sinatra控制器Jquery 通过Sinatra控制器根据Ajax请求将haml视图加载到布局中,jquery,ajax,json,sinatra,haml,Jquery,Ajax,Json,Sinatra,Haml,我正在我的页面中实现实时搜索功能。。我有以下简化的sinatra控制器 get '/search_item/:for' do //do some search stuff haml :search_item,:layout => (request.xhr? ? false : :layout), :locals => { :found_items => queried_items,
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控制器中的输入生成搜索项目视图,然后在布局结果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);
我试过了,但没用
我没有使用rails!
所以我有三个问题:
$.get()中将数据类型指定为html
然后如何在不刷新的情况下将search_item.haml呈现到layout.haml#results div中
首先,您需要将haml视图编译成html(浏览器不支持haml,但haml会编译成html/erb模板,您已经在这样做了!),然后您最好的方法可能是使用$(“某些选择器”).append(从“获取调用”接收的数据)
,或$(“某些选择器”).html(从“获取调用”接收的数据)
有没有更优雅的方法
我建议大家看看,这是一种javascript框架,用于管理单个页面UI
一旦你搞定了,我建议你退房。你最终会用主干网重新发明轮子,所以一旦你了解主干网是如何工作的,这将使它真正具有生产力
最后但并非最不重要。它只是更可读
这三件事需要一些时间来理解,但它是值得的 谢谢你的回答:)!如何在$.get()中指定html,以及如何在sinatra控制器中将haml视图呈现为html。您可以看到,作为对xhr请求的响应,我收到了一个HTTP/1.1500内部服务器错误。这可能是什么呢?您将其指定为第三个参数,请参见,基本上这只是告诉javascript如何处理传入数据。HTTP/1.1500内部服务器错误
是服务器端的一个问题。当您向'/search\u item/'+q
发出请求时,我注意到您没有使用:for
,也没有从javascript中的q
变量传递它。当你向那个地址发出请求时,sinatra的错误日志会说什么?该死。。我应该看看辛纳屈的日志。它表明由于未初始化的变量,haml文件无法正确编译。非常感谢你的帮助。问题解决了。