【问题标题】:updating a page in rails without continously refreshing更新rails中的页面而不持续刷新
【发布时间】:2012-06-14 18:31:20
【问题描述】:

我想用我编写的网络抓取脚本中的信息更新 rails 中的 erb.html 页面,但我不希望每次有新信息进入时都必须刷​​新页面。

我不知道将后台脚本放在哪里,rails 将如何调用它等等。

我该怎么做?

【问题讨论】:

  • 对我来说听起来像是一个 ajax 调用。将您的 ajax GET 信息放在不时调用的 .js 文件中。
  • @MurifoX:如果我的脚本是用 Ruby(而不是 javascript)编写的,这是我想要采用的方法吗?
  • 不使用 JavaScript 就无法在页面呈现后更新页面,因为执行更新的代码必须在浏览器中运行。因此,正如 MurifoX 所说,您一直在做 AJAX。
  • 我看到 Silverruby 存在。它使用 Silverlight 在客户端运行 ruby​​。我绝对不会使用它。我将使用 AJAX,看起来像。

标签: ruby-on-rails-3 model-view-controller jquery


【解决方案1】:

在构造方面有多种方法可以实现您想要的结果,但最终您将使用 Javascript 和 AJAX 调用,因为没有其他方法可以使用抓取的数据更新页面上的内容.

以下是我如何使用 AJAX 和屏幕抓取来实现 RoR:

application.js

在我们的应用程序 JS 文件中,我们监听一个字段何时更改(用户输入一个 web url 或某种数据),然后我们对我们的爬虫进行 AJAX 调用(稍后在 Routes.rb 中设置的 url ) 并且我们的数据以 JSON 格式返回(当调用 AJAX 的成功触发器时),我们循环并在两个字段中显示抓取的数据,这些字段的名称与我们的 JSON 键、值对的键类似。

$('#item_url').live('change', function() {          
     $.ajax({
            url: "/scrape/siteandnum", 
            data: {item_url: document.getElementById('item_url').value},             
            dataType: 'json', 
            success: function(data) {                                                               
                    $.each(data, function(key, value) {                        
                        document.forms['new_qued_item'].elements['qued_item_' + key].value = value
                    });         
                }
            });
}); 

qued_items_controller.rb

在我们的控制器中,我们有一个方法是 Ruby 抓取代码。它接收 item_url 的参数(从 AJAX 调用的数据传入)——在本例中,它接收 eBay 拍卖 URL 并为我们提供 eBay 站点域和商品编号。

def scrape_site_and_num
    url = params[:item_url] 
    itemnumber = url.match(/\d{12}/)[0].to_i 
    site = url.match(/ebay.(co.uk|com|de|fr|it|ca)/)[0]

    render :json => {'itemnumber' => itemnumber, 'site' => site}
end 

routes.rb

当然,我们必须有一个路由,以便 AJAX 调用知道从哪里访问我们的抓取方法。

  get "scrape/siteandnum/" => "qued_items#scrape_site_and_num"

所以你有它。使用此方法可以输入任何类型的数据,并且“幕后”Ruby 方法将处理用户输入并返回一些屏幕抓取的数据,而无需重新加载页面!

【讨论】:

  • url: "/scrape/siteandnum" 来自哪里?你是怎么选择那个字符串的?你需要一个叫做 scrape 的控制器吗?
  • 使用我们抓取的数据更新的页面名称是什么。那个视图是什么样的?
  • /scrape/siteandnum 都是路由,我们不需要一个名为 scrape 的控制器,因为我们已经手动告诉 Rails(在我展示的 routes.rb 文件中)我们将使用 qued_items控制器和 scrape_site_and_num 方法(我已经展示过)。该页面可以被命名为任何名称,并且可以看起来像任何东西。它只是使用 Javascript 来侦听更改为触发 AJAX 事件的文本,然后使用数据更新页面(使用 Javascript)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-28
  • 1970-01-01
  • 2011-12-22
  • 1970-01-01
  • 2016-06-10
  • 2021-07-15
  • 1970-01-01
相关资源
最近更新 更多