我应该如何正确刷新部分呈现部分(通过页面中的页面刷新js结果)

时间:2013-11-19 04:26:42

标签: jquery ruby-on-rails ajax ruby-on-rails-3

更新2 - marzapower再次出现.. ajax的成功部分导致了问题 - 下面的解释..

更新:

marzapower的答案很有效(见下文),但我需要一个计时器。

第一次工作,但在重新加载时它显示html标记而不仅仅是内容..我尝试了html_safe int refreshnews.js.erb文件,但它仍然无效。

如果我在< %%>之前使用单引号它是炸弹,因为'新闻/新闻源'也有它们 - 保留单引号并将部分名称更改为双引号..仍然无法正常工作..

refreshnews.js.erb:

$("#refreshscribbles").html("<%= j(render(:partial=> 'news/newsfeed', :locals=>{:news=>@news}).html_safe) %>");

我尝试了各种更改 - 单引号,右外侧括号上的.html_safe等等。但这是我得到的而不是干净的内容。

返回内容:

sample output

news.js
$(document).ready(function() 
{

  setInterval(

     function() {

        $.ajax({
            url: '/refreshnews.js',
            type: 'GET',
            dataType: 'script',
            success: function(result) 
            {
              $('#refreshscribbles').html(result)
            }
        });
    }
  , 500);
});

否则,解决方案是完美的 - 任何想法为什么html_safe不起作用?我应该在format.js中做些什么吗?


我有一个我正在处理的新闻源(想想facebook新闻源)。我需要更新Feed而无需再次重新加载整个页面。 (整个Feed一次加载 - 它不是一堆小负载..而是一个很大的负载......比如从sql select中返回数据)

我正在动态渲染一个部分,它根据数据中的值呈现另一个部分..

我偷了一个javascript解决方案,并将其工作到我的表单中,但它重新加载div部分它使用应用程序布局的那一刻。我尝试过layout =&gt; false等无济于事。我已经尝试过format.js respond_to部分,设置控制器的布局(除了也除外),几乎所有发布的内容都无济于事。

我真正想做的只是简单地刷新div而不包含应用程序布局。 (Rails 3.2,Ruby 1.92)

新闻控制员:

index.html.erb

<div class="actions" id="refreshscribbles">
  <%=render :partial=> 'news/newsfeed', :locals=>{:news=>@news}%>
</div>

_newsfeed.html.erb:

<% news.each do |act| %>
  <%=render :partial=> act["object_type"], :locals=>{:activity=>act}%>
  <br><%= act["object_type"]%>
  <hr>
<%end %>

news.js(注意,我在网址中尝试过刷新新闻等,但这只是最好在网页中拉回一页)。

$(document).ready(function(){
  var timelyrefreshScribbleFeeds = function(){
    url = '/news'
    $.get(url,function(data,status){
      $('#refreshscribbles').html(data)
      return false
    });
  };
  setInterval(timelyrefreshScribbleFeeds,600);
});

新闻控制员:

def refreshnews
  @news=News.get_newsstream(viewer_id,  @per_page, @current_page)
  respond_to do |format|
    format.html   #tried :layout => false, etc, to no avail
    format.json { render  json: @news }
  end
end

refreshnews.html.erb(空 - 用于简单地忽略没有方法错误)

的routes.rb

get  "refreshnews"  => "news#refreshnews", :as => "refreshnews"

如何通过ajax / jquery刷新此div?我已经看过多个解决方案但不是一个用于渲染部分渲染部分的解决方案等。上面的代码/解决方案有什么问题?

1 个答案:

答案 0 :(得分:1)

我会使用JS格式调用refreshnews:

def refreshnews
  @news=News.get_newsstream(viewer_id,  @per_page, @current_page)
  respond_to do |format|
    format.js
  end
end

在javascript url = '/refreshnews.js'调用中使用$.get

$.ajax({
  url: '/refreshnews.js',
  type: 'GET',
  dataType: 'script'
});

您需要相应的模板文件:

refreshnews.js.erb

$("#refreshscribbles").html("<%= j(render :partial=> 'news/newsfeed', :locals=>{:news=>@news}) %>");

完成所有这些后,您应该会看到该应用调用refreshnews操作并获取一个js脚本,该脚本将使用您需要的所有更新数据更新主div