はじめに
初投稿 & だいぶ既出
備忘録だから許してください〜
FXの現在レート取得APIを一定間隔で叩いてグラフ出したいな〜って思って始めてみました
ホントにこれでいいのか謎なのでツッコミお待ちしております
やること
- ページロード後、Ajax使って一定間隔でpタグを書き換え
- jsをコントローラ毎に処理を変える
Ajaxで一定間隔でページ一部ロード
まずこんなコントローラを用意します
# 大本のページのやつ
def yyy
@time = Time.now()
end
# ajaxリクエストを受け取って実行するやつ
def ajax_action
@time = Time.now()
end
setIntervalで5秒毎にAjaxのリクエストをするcoffeescriptを作成
$ ->
timer = setInterval ->
update()
, 5000
update = ->
$.ajax
url: 'xxx/ajax_action'
type: 'GET'
return
routesも追加記述(scaffoldで作り始めちゃったのでこんな書き方に)
resources :xxx do
get "ajax_action", to: "xxx#ajax_action", on: :collection
end
viewをこんな感じにやると完成です
ちなみに最初はerbではなくslimを使ってたのですが、hoge.js.slimがちょっと上手くいかなかったのでerbに戻しました
$("#time").html("<%= @time %>");
<p id="time"><%= @time %></p>
これで5秒毎にpタグの部分だけ変わります
jsをコントローラ毎に処理を変える
なんかこんな感じでいっぱいajax書いてたら、一辺に読み込み&実行されて嫌だなって思って、個別でなんとか読み込ませて実行します
なるべく元の状態(rails newした状態)から変えずにやりたかったので、こんな感じ↓の方法をとってみました
jquery.readyselectorってのを使います
https://github.com/Verba/jquery-readyselector
からjquery.readyselector.jsを持ってきて、assets/javascript配下に置きます
application.html.erbのbodyの部分をちょっとだけ変更
<body class="<%= controller_name -%> <%= action_name -%>">
上で書いたcoffeescriptを次のように変更
$('.xxx.yyy').ready ->
timer = setInterval ->
このままでいけるんですが、turbolinksのせいでリンクから飛んできたら動いてくれないので
gem 'jquery-turbolinks'
を入れたらいい感じになるらしいです
参考
http://www.upty.jp/railsandajax-2-create-sample-ajax/
http://blog.hello-world.jp.net/javascript/1673/
http://o.inchiki.jp/obbr/97#toc_4