Автоматическое обновление <div> без повторной загрузки всей страницы
Я пытаюсь обновить содержимое "mydiv" , не обновляя всю страницу индекса.
@mydata предоставляется моим контроллером. Мне нужно пересчитать его каждые n секунд и передать его в "mydiv"
С "link_to" он работает!
index.html.erb
<%=
link_to('refresh', '/mycontroller/index', :remote => true)
%>
<div id="mydiv">
<%=
@mydata
%>
</div>
index.js.erb
$('#mydiv').html('<%= escape_javascript(@mydata) %>')
Теперь мне нужно обновлять содержимое "mydiv" автоматически каждые n секунд (так что без клика по ссылке). Я пробовал решения:
но не повезло.
В моем приложении .js я написал это:
function executeQuery() {
$.ajax({
//url: '/index',
success: function(data) {
$('#mydiv').html(data)
}
});
setTimeout(executeQuery, 500);
}
$(document).ready(function() {
setTimeout(executeQuery, 500);
});
Для тех, кто сталкивается с моей же проблемой, я решил это, заменив
$('#mydiv').html(data)
с
$('#mydiv').load('/mycontroller/index #mydiv')
Ответы
Ответ 1
Установите макет в значение false в действии и просто передайте релевантный контент, а не всю страницу
def action1
<your code here>
end
def action2
<your code here>
render :layout => false
end
Ваше представление для action2 должно содержать контент, относящийся только к #mydiv.
Лучшим решением было бы использовать одно действие и изменить параметры рендеринга на основе типа запроса. (Ajax или не ajax)