Обновлять DOM во всех клиентах с результатом в виде просьбы ajax

Я остался этот руководитель AJAX и Rails. В котором появляется, как сохранять, изменять и удалять posts, не перезагружая страницы посредством Аякса, но если бы он хотел, что после того, как имел другую открытую закладку, и я удаляю post в одной, в других закладка также будьте удалены, с кодом, который у меня есть только, освежается в закладке 1, как он мог бы способствовать тому, чтобы все клиенты отразили изменения, которые я реализую на модели posts.

Post-> index.html.erb



<%= render @posts %>
<%= form_for(@post, remote: true) do |f| %> <%end%>

Метод драйвера:

def create
  @post = Post.new(post_params)

  respond_to do |format|
    if @post.save
      format.html { redirect_to @post, notice: 'Post was successfully created.' }
      format.json { render :show, status: :created, location: @post }
      format.js #ajax
    else
      format.html { render :new }
      format.json { render json: @post.errors, status: :unprocessable_entity }
      format.js #ajax
    end
  end
end

И CREATE.JS.ERB:

$("#mynewpost").modal('hide');
$(".post_title").val('');
$(".post_content").val('');

$("#container_posts").prepend('<%= j render @post %>');
$("#post_<%= @post.id %>").hide().fadeIn(1000);

1
задан 11.06.2016, 01:10
3 ответа

HTTP - протокол stateless. Это, не сохраняет состояние. В случае, который ты говоришь, делается просьба ищется данных и показывает себе пользователя. После этого браузеру ему не важно, если у базы данных есть post, который он показывает или нет.

То, что ты искал бы, является Вебом stateful, где он всегда был бы незаконченным видения изменений в базе данных и имения всегда соединено сервера, базы данных и вида пользователя.

Ты можешь делать несколько вещей, одна состоит в том, чтобы использовать websockets (которые какие-то браузеры еще не выносят) или другая состоит в том, чтобы использовать техники, как long-polling.

2
ответ дан 24.11.2019, 14:11

Когда сервер Rails получает request к одному из Ваших методов, реализуй необходимые консультации в базу данных и реализуй действие, в этом случае render вида, который возвращен к клиенту, что старательное как часть ответа на начальный request.

Происходит то же самое с просьбами json или ajax, каждый результат послан как часть ответа сервера к тому, кто сделал просьбу, а именно, если ты сделал request в закладке 1, - эта закладка, которая получит ответ, больше не закладка 2, из-за которых я не осуществляюсь ningúna действие.

Что ты ищешь реализовывать, оно называется программированием активирует, а именно, что приложение reaccióne в изменения вместо того, чтобы ждать действие, чтобы возвращать результат, в приложении этого типа, так, что не иметь значение тот, кто сделал обновление данных, все клиенты реагировали бы и показывали обновленные данные, это ты можешь делать это в rails из следующих форм:

  1. Использовать framework frontend реактив (ReactJS) и Наличие всех мастей у игрока, для которого Rails вел бы себя как сервер API Rest. https://github.com/reactjs/react-rails
  2. Приложение isomorfica, используя framework, как volt, который он позволяет тебе использовать ruby для backend и frontend так, не будучи должен повторять код, ответив, ты располагаешь в порядке в frontend и реагируя быстро на изменения в моделях. http://voltframework.com
  3. WebSockets, ты можешь использовать websockets, чтобы бросать событие в клиентах используя Чаннельс (Каналы) так что вместо ajax, ты послал бы событие в канал с информацией о том же самом, чтобы показывать изменения в совещаниях всех клиентов. https://github.com/websocket-rails/websocket-rails
  4. Polling, который является самым старым способом делать это, делая request javascript в сервер консультируя последние изменения.
2
ответ дан 24.11.2019, 14:11
  • 1
    Спасибо Джоэл, в горе я инициализируюсь в rails, у меня есть 2 вопроса: 1) и #191; если какое-либо использование frameworks frontend, о котором ты упомянул, возможно, что есть конфликты с bootstrap?. и 2) форм, о которых ты упомянул, и #191; который ты рекомендуешь мне? – LuisC 10.06.2016, 09:40
  • 2
    Нет, не быть должным и # 237; когда - ning и # 250; n конфликт с boostrap. – Joel Ibaceta 10.06.2016, 18:13
  • 3
    Завись многий из твоего уровня от expertise, и что ты так хорошо манипулировал Javascript, если ты fullstack сеньор, рекомендовать тебя и # 237; чтобы использовать React, или если ты только манипулируешь Руби достаточно хорошо, podr и # 237; схвати использовать м и # 233; каждый isomorfico. – Joel Ibaceta 10.06.2016, 18:15
  • 4
    Лично я не рекомендую polling, которым сервер получает много ненужных request, этого podr и # 237; чтобы затрагивать негативно, если у тебя есть высокое скопление или это отражается в ценах из-за использования сервера. – Joel Ibaceta 10.06.2016, 18:16
  • 5
    Превосходный, я верю в то, что я идти и # 233; из-за выбора использовать метод isomorfico, даже я не очень знаю в javascript. слышит Джоэл у меня есть сомнение новичка: если использование ajax не отражает мне изменения, которые другой человек делает в реестрах с другого персонального компьютера, тогда, для того, чтобы использовать это? тогда было бы лучше уходить прямо в programaci и # 243; n активируй, не используя ajax или я ошибаюсь? – LuisC 10.06.2016, 18:55

Ты не будешь мочь перезагружать закладку 2, так как просьба в сервер ты делаешь с закладки 1.

Ты должен использовать framework, чтобы сообщать изменения от сервера странице. В твоем случае, чтобы не осложнять больше тему, он сделал бы Polling. Это классическое решение, относится друг к другу в реализации каждого X времени просьба из-за javascript в сервер. Это не рекомендуемое теперь, но как только у тебя есть инициализировавший проект помещать новые frameworks может быть более проблематичным.

Лично я использую целого Polling, когда это разработки .net, что я использую SignalR.

1
ответ дан 24.11.2019, 14:11
  • 1
    Спасибо @HectorFernandez у меня есть 1 вопрос: и #191; если какое-либо использование frameworks frontend, чтобы сообщать изменения сервера, - возможно, что есть конфликты с bootstrap?. – LuisC 10.06.2016, 16:37