我想使用我编写的网页编写脚本中的信息更新rails中的erb.html页面,但我不希望每次有新信息时页面都要刷新。
我不知道在哪里放置后台脚本,rails将如何调用它等等。
我该怎么做?
答案 0 :(得分:2)
有许多方法可以在构造方面达到您想要的结果,但最终您将使用Javascript和AJAX调用,因为没有其他方法可以使用抓取的数据更新页面上的内容。
以下是我如何使用AJAX和屏幕抓取来实现RoR:
<强>的application.js 强>
在我们的应用程序JS文件中,我们在字段上监听它何时被更改(用户输入web url或某种数据),然后我们对我们的scraper进行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 scrape代码。它接受了item_url的params(从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调用知道访问我们的scrape方法的位置。
get "scrape/siteandnum/" => "qued_items#scrape_site_and_num"
所以你有它。使用此方法可以输入任何类型的数据,并且“幕后”Ruby方法将处理用户输入并返回一些屏幕抓取数据,而不会重新加载页面!