2012-06-14 56 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

相關問題