检测到搜索时,我有一部分要加载。在某些情况下加载可能需要很长时间,因此我希望在页面完全加载后通过Ajax加载,否则很可能会导致超时。
我目前的做法是导致同步加载。
我还希望显示一个加载屏幕,直到它满载为止。这当前正在工作,但仅限于超时设置,因为它是同步加载。
<% if(params[:q][:name_cont].present?) %>
<script>
$( document ).ready(function() {
function load_partial() {
$("div.super_search").replaceWith('<%= escape_javascript(render partial: 'super_search_tp') %>');
}
// use setTimeout() to execute
setTimeout(load_partial, 1000)
});
</script>
<div class="super_search">
<i class='fa fa-spinner fa-spin'></i> Loading Product Analysis...
</div>
<% end %>
答案 0 :(得分:1)
为控制器中的partial创建一个方法:
def super_search
@search = @@products
render :layout => false
end
重命名部分,以便它是此方法的视图。
将@@products
添加到索引方法中,以便可以在新方法中使用搜索中的数据:
@@top_products = @q.result
呈现部分的代码:
<% if(params[:q][:name_cont].present?) %>
<script>
$.ajax({
url: "/products/super_search",
cache: false,
success: function(html){
$("#foo-bar").replaceWith(html);
}
});
</script>
<div class="super_search" id="foo-bar">
<i class='fa fa-spinner fa-spin'></i> Loading Product Analysis...
</div>
<% end %>