現在チャットアプリを非同期通信で行いたく実装を進めているところです。
非同期通信実装中出ているエラーについてご教授願いたく投稿させて頂きます。
投稿を行うとデータの保存はされます
terminal
1Parameters: {"authenticity_token"=>"dI20SOvuLzNeOYpg2d+2HVWPooFoW3JEH7H38HSaX6e5JyNjQYUwpclisTB6xmf7+m0z7q4vM64f+Wo03qRkgw==", "chat_message"=>{"message"=>"lllll"}, "commit"=>"送信", "chat_id"=>"44"} 2 User Load (0.5ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1 3 ↳ app/controllers/chat_messages_controller.rb:13:in `chat_message_params' 4 (0.3ms) BEGIN 5 ↳ app/controllers/chat_messages_controller.rb:5:in `create' 6 User Load (0.6ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1 7 ↳ app/controllers/chat_messages_controller.rb:5:in `create' 8 Chat Load (0.5ms) SELECT `chats`.* FROM `chats` WHERE `chats`.`id` = 44 LIMIT 1 9 ↳ app/controllers/chat_messages_controller.rb:5:in `create' 10 ChatMessage Create (0.4ms) INSERT INTO `chat_messages` (`message`, `user_id`, `chat_id`, `created_at`, `updated_at`) VALUES ('lllll', 1, 44, '2020-12-03 09:30:34.892409', '2020-12-03 09:30:34.892409') 11 ↳ app/controllers/chat_messages_controller.rb:5:in `create' 12 (0.5ms) COMMIT 13 ↳ app/controllers/chat_messages_controller.rb:5:in `create' 14Completed 200 OK in 15ms (Views: 0.5ms | ActiveRecord: 2.7ms | Allocations: 6974
javascript
1function message() { 2 const submit = document.getElementById("submit"); 3 submit.addEventListener("click", (e) => { 4 const formData = new FormData(document.getElementById("form")); 5 const XHR = new XMLHttpRequest(); 6 XHR.open("POST", `/chats/:chat_id => (${chat.id}/chat_messages`, true); 7 console(XHR) 8 XHR.responseType = "json"; 9 XHR.send(formData); 10 XHR.onload = () => { 11 if (XHR.status != 200) { 12 alert(`Error ${XHR.status}: ${XHR.statusText}`); 13 return null; 14 } 15 const chat = XHR.response.post; 16 const messages = document.getElementById("messages"); 17 const formText = document.getElementById("content"); 18 const HTML = ` 19 <div> 20 ${chat.message} 21 </div>`; 22 message.insertAdjacentHTML("afterend", HTML); 23 formText.value = ""; 24 }; 25 e.preventDefault(); 26 }); 27} 28window.addEventListener("load", message);
6行目のXHR.openでエラーが出ます
error
1Uncaught ReferenceError: chat is not defined 2 at HTMLInputElement.<anonymous> (message.js:6)
その他の記述の以下の通りです
applicationjs
1require("@rails/ujs").start() 2// require("turbolinks").start() 3require("@rails/activestorage").start() 4require("channels") 5require("./preview") 6require("./message") 7//= require 'jquery' 8//=require "popper" 9//=require "bootstrap-sprockets"
chatmessages
view
1<%= form_with(model: [@chat, @chat_message], id: "form" ) do |f| %> 2 <%= f.text_field :message, id:"content" %> 3 <%= f.submit '送信', id:"submit" %> 4<% end %> 5<div id='messages'> 6</div>
chats
1def show 2 @chat_message = ChatMessage.new 3 @chat = Chat.find(params[:id]) 4 @chat_messages = @chat.chat_messages.includes(:user) 5end
行なったこと
エラーの起こっている6行目は、元々下記のような記述だったのですが、
XHR.open("POST", `/chats/:chat_id/chat_messages`, true);
これでは、chat_idを参照できないので、書き換えてデータの保存はできるようになった形です。
application.jsの書き順なども変えてみたのですが、効果はありませんでした。
以上、何かアドバイスをいただけないでしょうか。
よろしくお願いいたします。
環境
ruby:2.6.5
rails:6.0.3.4
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/07 10:33
2020/12/07 20:53
2020/12/09 03:43