railsでajaxを用いての非同期通信のチャット機能を作っています。
Javascript 自体は動いているっぽいのですが,表示されるhtmlが
$(message.id} $(message.date}$(message.message)
と、そのまま表示されてしまいます。
原因がわからないので、教えていただきたいです。
message.js
js
1$(document).on('turbolinks:load', function(){ 2 function buildHTML(message){ 3 var html = `$(message.id) 4 $(message.date) 5 $(message.message)` 6 return html; 7 } 8 9 $('#form').on('submit', function(e){ 10 e.preventDefault() 11 var formData = new FormData(this); 12 var url = (window.location.href); 13 $.ajax({ 14 url: url, 15 type: 'POST', 16 data: formData, 17 dataType: 'json', 18 processData: false, 19 contentType: false 20 }) 21 .done(function(data){ 22 var html = buildHTML(data); 23 $('.messages').append(html); 24 $('.submit').prop('disabled', false) 25 $('.messages').animate({ scrollTop: $('.messages')[0].scrollHeight},50); 26 }) 27 .fail(function(data){ 28 alert ('メッセージ送信に失敗しました'); 29 }) 30 }) 31});
messages_controller
rb
1class MessagesController < ApplicationController 2 3 def index 4 @messages = Message.all 5 @message = Message.new 6 end 7 8 def create 9 @message = Message.new(message_params) 10 if @message.save 11 respond_to do |format| 12 format.html { redirect_to messages_path } 13 format.json 14 end 15 else 16 render :index 17 end 18 end 19 20 private 21 def message_params 22 params.require(:message).permit(:message) 23 end 24 25end
index.html.erb
erb
1<%= javascript_include_tag 'message' %> 2 3<% @messages.each do |message| %> 4 <%= message.message %> 5 <%= message.created_at.strftime("%Y/%m/%d %H:%M") %> 6 <%= message.id %> 7<% end %> 8<ul class="messages"> 9</ul> 10 11 12<%= form_for @message, html: { class: 'form' } do |f|%> 13 <%= f.text_field :message %> 14 <%= f.submit class: 'submit' %> 15<% end %>
create.json.jbuilder
jbuilder
1json.date @message.created_at.strftime("%Y/%m/%d %H:%M") 2json.message @message.message 3json.id @message.id
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/24 04:21