Я отправил очень плохой вопрос об этом раньше, поэтому я отправляю и делаю это MVCE.Rails 4/AJAX GET данные от контроллера
Я строю службу обмена сообщениями с Rails и AJAX. Пока я могу отправить сообщение через форму, оно будет обновляться в HTML DOM, метод AJAX POST отправит его на контроллер, а контроллер сохранит его в базе данных.
Теперь мне нужно добавить метод AJAX, который будет получать сообщение, которое было отправлено, чтобы другие пользователи (в других браузерах) могли его просмотреть.
В настоящее время, и это хакерский способ выполнения, в моем JS-коде я устанавливал тайм-аут, который вызывает функцию AJAX GET каждые полсекунды. Есть ли лучший способ сделать это - как в случае, когда контроллер сохраняет сообщение, может ли он вызвать функцию AJAX? Код AJAX выглядит следующим образом:
function retrieveMessages(){
var message;
<%debugger%>
$.ajax({
type:"GET",
url:"<%= messages_get_path %>",
dataType:"json",
data: { what_goes_here: "blah" }, //this is the part I do not understand -- see below
success:function(data){
message = data;
console.log(data)
}
});
setTimeout(retrieveMessages, 500);
}
$(document).ready(function(){
//get messages
setTimeout(retrieveMessages, 500);
... more irrelevant
линия data: { what_goes_here: "blah" }
не имеет смысл для меня. Каков синтаксис для того, чтобы контроллер отправил данные обратно в data:
? Кроме того, с консоли я вижу, что what_goes_here
передается в качестве параметра контроллеру - опять же это не имеет смысла для меня.
Мой маршрут выглядит следующим образом get 'messages/get', :to => 'messages#get'
(это может быть неправильно?)
rake routes
показывает
messages_get GET /messages/get(.:format) messages#get
И как сейчас, я не имею ничего в моем контроллере, кроме respond_to
, потому что в этот момент я просто пытаюсь вызвать контроллер. Каков синтаксис для отправки данных обратно в метод AJAX?
def get
debugger
respond_to do |format|
format.html
format.json {render json: @variable} //is this @variable being passed to the AJAX call?
end
end
UPDATE
Это имеет смысл для меня ... метод AJAX просто вызывает функцию def get
. Затем функция def get
находит сообщение в базе данных и сохраняет его в переменной экземпляра. Впоследствии я могу добавить код Javascript, который вставляет его в DOM. Однако у меня должно быть что-то неправильно в моей маршрутизации, потому что я получаю (в консоли) http://localhost:3000/messages/get 404 (Not Found)
Вы хотите сказать, что другие пользователи с другими браузерами должны учесть это сообщение сразу после его отправки? –
@NicNilov правильно, есть ли совершенно другой способ сделать это? –
'data: {what_goes_here:" blah "}' предназначен для предоставления дополнительных параметров с запросом, как вы заметили сами. Поскольку вам не нужны дополнительные параметры для обновления сообщений, вы можете просто удалить эту строку. –