如何在Ruby on Rails中使用Ajax加载部分

时间:2015-08-25 20:19:06

标签: javascript jquery ruby-on-rails ajax

检测到搜索时,我有一部分要加载。在某些情况下加载可能需要很长时间,因此我希望在页面完全加载后通过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 %>

1 个答案:

答案 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 %>