Как мне заставить AJAX работать, используя рельсы и таймер javascript?
Приложение rails, которое я программирую, получает данные из внешнего источника из общего объекта через ffi gem в ruby. У меня есть данные для входа и отображения на экране один раз, но когда я пытаюсь обновить с помощью AJAX, я не могу манипулировать данными должным образом. Я просто хочу несколько div, которые содержат значения данных, которые будут обновлены с новыми данными.
Pane_controller:
def getAllData
init
a = getCurrent
#a << getRIM
a << getWaterTemp
a << getCharge
return a
end
def index
@data = getAllData
respond_to do |format|
format.html
format.js
end
end
Coffeescript AJAX:
systemTick = ->
$.ajax({
url: "/"
});
...
systemTickTimeout = setTimeout (->
systemTick()), 1000
index.js.erb (у меня сейчас есть это место в app/views/pane/):
$("#amps").html(<%= @data[0]%>);
$("#volts").html(<%= @data[1]%>);
$("#watts").html(<%= @data[2]%>);
$("#current-fuel-cell-state").html(<%= @data[3]%>);
$("#temperature-reading").html(<%= @data[4]%>);
$("#battery-charge").html(<%= @data[5]%>);
Вот маршруты, которые у меня есть:
root :to => 'pane#index'
get '/settings' => 'pane#settings'
get '/history' => 'pane#history'
get '/dashboard' => 'pane#dashboard'
Всякий раз, когда я пытаюсь это сделать, я получаю сообщение об ошибке, что для Nil нет метода [], который, как я знаю, подразумевает, что данные не отправляются, но я не понимаю, почему?
РЕДАКТИРОВАТЬ * Метод nil no [] больше не существует, но я все еще не могу отобразить новые данные через AJAX, значения в моем файле js.erb не заполняются должным образом.
index.html.erb:
<tr>
<td id="amps"><%= "%.1f" % @data[0]%></td>
</tr>
<tr>
<td id="volts"><%= "%.2f" % @data[1]%></td>
</tr>
<tr>
<td id="watts"><%= "%.1f" % @data[2]%></td>
</tr>
<span class="value" id="battery-charge"><%=@data[5].to_i%></span>
<span class="value" id="temperature-reading"><%=@data[4].to_i%></span>
<span id="current-fuel-cell-state" style="display:none"><%=@data[3].to_i%></span>
также это то, что генерируется в журнале:
Started GET "/" for 127.0.0.1 at 2013-10-23 15:30:00 -0400
Processing by PaneController#index as */*
Rendered pane/index.html.erb within layouts/application (0.5ms)
Completed 200 OK in 294ms (Views: 9.9ms | ActiveRecord: 0.0ms)
1 ответ
Вы должны разместить свой шаблон JavaScript в app / views / panes /
app / views / panes / index.js.erb (обратите внимание на изменение аргумента в html)
$("#amps").html("<%= @data[0]%>");
$("#volts").html("<%= @data[1]%>");
$("#watts").html("<%= @data[2]%>");
$("#current-fuel-cell-state").html("<%= @data[3]%>");
$("#temperature-reading").html("<%= @data[4]%>");
$("#battery-charge").html("<%= @data[5]%>");
PanesController
def getAllData
init
a = getCurrent
#b = getRIM
a << getWaterTemp
a << getCharge
return a
end
def index
@data = getAllData
respond_to do |format|
format.html
format.js
end
end