我想用我寫的webscraping腳本的信息來更新rails中的erb.html頁面,但是我不希望每次新信息進入時頁面都必須刷新。在沒有持續刷新的情況下更新一個頁面
我不知道放在哪裏背景腳本,軌道將如何調用它,等
我該怎麼辦呢?
我想用我寫的webscraping腳本的信息來更新rails中的erb.html頁面,但是我不希望每次新信息進入時頁面都必須刷新。在沒有持續刷新的情況下更新一個頁面
我不知道放在哪裏背景腳本,軌道將如何調用它,等
我該怎麼辦呢?
在構建方面有很多方法可以實現您想要的結果,但最終您將使用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方法將處理用戶輸入,並返回一些屏幕截圖數據,而無需重新加載頁面!
哪裏有 url:「/ scrape/siteandnum」 從哪裏來?你是如何選擇該字符串的?你需要一個叫做scrape的控制器嗎? –
什麼是使用我們刮取的數據更新的頁面的名稱。這個觀點是什麼樣子的? –
/scrape/siteandnum是所有的路由,我們不需要一個名爲scrape的控制器,因爲我們已經手動告訴Rails(在我顯示的routes.rb文件中)我們將使用qued_items控制器和scrape_site_and_num方法(它我已經展示)。該頁面可以被命名爲任何東西,可以看起來像什麼。它只是使用Javascript來聽取更改後的文本以觸發AJAX事件,然後使用數據更新頁面(使用Javascript)。 – user783437
聽起來像一個阿賈克斯給我打電話。將您的ajax GET信息放置在您不時被調用的.js文件中。 – MurifoX
@MurifoX:如果我的腳本是用Ruby編寫的(而不是JavaScript?),這是我想採取的方法嗎? –
在沒有使用JavaScript的情況下呈現頁面後,無法更新頁面,因爲執行更新的代碼必須在瀏覽器中運行。所以你像MurifoX所說的那樣被卡在AJAX中。 – MrTheWalrus