Подтвердить что ты не робот

Автоматическое обновление <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')
4b9b3361

Ответ 1

Установите макет в значение false в действии и просто передайте релевантный контент, а не всю страницу

def action1
   <your code here>
end
def action2
   <your code here>
   render :layout => false
end

Ваше представление для action2 должно содержать контент, относящийся только к #mydiv.

Лучшим решением было бы использовать одно действие и изменить параметры рендеринга на основе типа запроса. (Ajax или не ajax)