【问题标题】:How should I properly refresh a partial that renders a partial (refreshing via js results in page in a page)我应该如何正确刷新呈现部分的部分(通过js刷新导致页面中的页面)
【发布时间】:2013-11-19 04:26:41
【问题描述】:

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

更新:

marzapower 的回答效果很好(见下文),但我需要在计时器上使用它。

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

如果我在 之前使用单引号,它会爆炸,因为 'news/newsfeed' 也有它们 - 保留单引号并将部分名称更改为双引号.. 仍然无法正常工作..

刷新新闻.js.erb:

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

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

返回内容:

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 新闻提要)。我需要在不重新加载整个页面的情况下更新提要。 (整个提要一次加载 - 它不是一堆小负载。而是一个大负载.. 就像从 sql 选择返回数据)

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

我偷了一个 javascript 解决方案,并将其添加到我的表单中,但在它重新加载 div 部分的那一刻,它使用了应用程序布局。我试过 layout=>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(注意,我已经在 url 中尝试了 refreshnews 等,但它充其量只是在一个页面中拉回一个页面)。

$(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?我已经看到了多种解决方案,但没有一种用于渲染部分的渲染部分等。上面的代码/解决方案有什么问题?

【问题讨论】:

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


    【解决方案1】:

    我会使用 JS 格式调用 refreshnews:

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

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

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

    您需要一个相应的模板文件:

    刷新新闻.js.erb

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

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

    【讨论】:

    • 我添加了这个并使用计时器重新加载部分 - 它最初工作,但随后的请求显示 html 文本。我尝试了 html_safe 无济于事。我玩过单引号、双引号等,它要么停止工作,要么将标记文本与普通文本一起显示。有任何想法吗?这是 refreshnews.js.erb 代码: $("#refreshscribbles").html(" 'news/newsfeed', :locals=>{:news=>@news} ).html_safe) %>");
    • 请查看我更新的问题.. 非常感谢您的帮助!
    • 去掉$.ajax 中的success: 参数。由于它需要一个脚本,它会自动执行远程 javascript,从而更新页面。我创建了一个测试应用程序来测试它并且效果非常好。
    猜你喜欢
    • 2015-12-22
    • 2013-07-27
    • 2023-04-10
    • 1970-01-01
    • 2013-10-28
    相关资源
    最近更新 更多