Javascript Ajax与RubyonRails简单视图刷新

Javascript Ajax与RubyonRails简单视图刷新,javascript,ruby-on-rails,ruby,ajax,Javascript,Ruby On Rails,Ruby,Ajax,我想知道是否有人能帮我解决一个问题,我正在Rails中开发一些AJAX。我想尝试做一些简单的事情,我只是想不断地检查索引视图中的新条目,是否会在屏幕外发生 每隔几秒钟,新的条目就会消失,这真的很酷吗?新条目位于一个名为image的div类中,在该类中: <%= image_tag image.image_url(:medium).to_s %> 我尝试了一些教程,但有些似乎过时了,有点偏离了我想要达到的目标。我希望有人能在正确的方向上帮助我。基本思想是: 您可以存储最新的条目,

我想知道是否有人能帮我解决一个问题,我正在Rails中开发一些AJAX。我想尝试做一些简单的事情,我只是想不断地检查索引视图中的新条目,是否会在屏幕外发生

每隔几秒钟,新的条目就会消失,这真的很酷吗?新条目位于一个名为image的div类中,在该类中:

<%= image_tag image.image_url(:medium).to_s %>


我尝试了一些教程,但有些似乎过时了,有点偏离了我想要达到的目标。我希望有人能在正确的方向上帮助我。

基本思想是:

  • 您可以存储最新的条目,这些条目是以javascript可以访问的方式加载的,例如在
    data-
    属性中
  • 您可以延迟地循环ajax调用
  • ajax调用的响应将在DOM中产生更改
  • 1. 视图(images/index.html.erb):

    3. 控制器:

    @images = Image.order('id desc')
    @images = @images.where('id > ?', params[:latest_id]) if params[:latest_id]
    
    视图(images/index.js.erb):

    $('div.image:first')。在(''.hide().fadeIn()之前
    
    注意,我对您的模型名称和路径做了一些假设。您应该根据需要修改路径


    此示例用于说明目的,不适用于实际应用程序-如果服务器过载,javascript将不断用请求敲打它,或者如果您的初始页面没有初始条目,则插入新条目的方式将中断。

    基本思想是:

  • 您可以存储最新的条目,这些条目是以javascript可以访问的方式加载的,例如在
    data-
    属性中
  • 您可以延迟地循环ajax调用
  • ajax调用的响应将在DOM中产生更改
  • 1. 视图(images/index.html.erb):

    3. 控制器:

    @images = Image.order('id desc')
    @images = @images.where('id > ?', params[:latest_id]) if params[:latest_id]
    
    视图(images/index.js.erb):

    $('div.image:first')。在(''.hide().fadeIn()之前
    
    注意,我对您的模型名称和路径做了一些假设。您应该根据需要修改路径


    此示例用于说明目的,不适用于实际应用程序-如果服务器过载,javascript将不断使用请求对其进行攻击,或者如果您的初始页面没有初始条目,插入新条目的方式将中断。

    是最新的,但您需要订阅:p是最新的,但您需要订阅:PThanks@bdares!想看看我把javascript放在第2节的什么地方吗?直接粘贴到底部的application.js?嘿,老兄,我好像没法继续?它没有给我任何错误,它不仅仅是在更新:(有没有一个好方法来判断它是否在尝试做任何事情?你会想分别查看服务器日志和浏览器控制台中的ruby和javascript错误。谢谢你,伙计,这个概念看起来不错,我只是很难让它正常工作:(谢谢@bdares!只想检查一下我把javascript放在第2节的什么地方?直接粘贴到底部的application.js中就行了?嘿,伙计,我好像没法继续这样做?它没有给我任何错误,根本不只是更新:(有没有一个很好的方法来判断它是否在尝试做任何事情?你会想分别查看服务器日志和浏览器控制台中的ruby和javascript错误。谢谢你,伙计,这个概念看起来不错,我只是在让它工作时遇到了麻烦:(
    function poll(){
      latest_id = $('div.image:first').data('id')
      $.getScript('/images?latest_id='+latest_id)
    }
    
    $(function(){setInterval(poll, 5000})
    
    @images = Image.order('id desc')
    @images = @images.where('id > ?', params[:latest_id]) if params[:latest_id]
    
    $('div.image:first').before('<%=j render @images%>').hide().fadeIn()