2012-06-14 55 views
2

我想用我写的webscraping脚本的信息来更新rails中的erb.html页面,但是我不希望每次新信息进入时页面都必须刷新。在没有持续刷新的情况下更新一个页面

我不知道放在哪里背景脚本,轨道将如何调用它,等

我该怎么办呢?

+0

听起来像一个阿贾克斯给我打电话。将您的ajax GET信息放置在您不时被调用的.js文件中。 – MurifoX

+0

@MurifoX:如果我的脚本是用Ruby编写的(而不是JavaScript?),这是我想采取的方法吗? –

+1

在没有使用JavaScript的情况下呈现页面后,无法更新页面,因为执行更新的代码必须在浏览器中运行。所以你像MurifoX所说的那样被卡在AJAX中。 – MrTheWalrus

回答

2

在构建方面有很多方法可以实现您想要的结果,但最终您将使用Javascript和AJAX调用,因为没有其他方式可以通过刮除来更新页面上的内容数据。

下面是我如何使用AJAX和屏幕刮回报率:

的application.js

在我们的应用程序的JS文件,我们听的一个字段,当它被改变(用户输入的Web url或某种数据),然后我们对我们的刮板(后来在Routes.rb中设置的url)进行AJAX调用,并且我们的数据以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拍卖网址并为我们提供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方法将处理用户输入,并返回一些屏幕截图数据,而无需重新加载页面!

+0

哪里有 url:“/ scrape/siteandnum” 从哪里来?你是如何选择该字符串的?你需要一个叫做scrape的控制器吗? –

+0

什么是使用我们刮取的数据更新的页面的名称。这个观点是什么样子的? –

+0

/scrape/siteandnum是所有的路由,我们不需要一个名为scrape的控制器,因为我们已经手动告诉Rails(在我显示的routes.rb文件中)我们将使用qued_items控制器和scrape_site_and_num方法(它我已经展示)。该页面可以被命名为任何东西,可以看起来像什么。它只是使用Javascript来听取更改后的文本以触发AJAX事件,然后使用数据更新页面(使用Javascript)。 – user783437

相关问题