前提・実現したいこと
チャットアプリを作成中です。
JSONでの非同期通信で、チャットができるようにしたいです。
発生している問題・エラーメッセージ
送信ボタンを押すと、画面が固まってしまい、ターミナルを確認すると
Started POST "/items/7/messages" for ::1 at 2020-07-13 21:02:11 +0900
Processing by MessagesController#create as JSON
(1.0ms) COMMIT
↳ app/controllers/messages_controller.rb:14:in `create'
Rendering messages/create.json.jbuilder
と書かれているので、JSONに割り振りはできているみたいです。
しかし、非同期で通信はされません。
リロードすると、チャットメッセージはブラウザに現れますが、HTMLで現れます。
画面にはエラー文が出てこず、byebugを使用しexitをした時にCompleted 500 Internal Server Error in 22582ms (ActiveRecord: 2.1ms | Allocations: 72285)と現れます。
####messages_controller.rb
class MessagesController < ApplicationController def index @item = Item.find(params[:item_id]) @message = Message.new @messages = @item.messages.includes(:shop) end def create @item = Item.find(params[:item_id]) @message = @item.messages.new(message_params) if @message.save respond_to do |format| format.json end else @messages = @item.messages.includes(:shop) flash.now[:alert] = 'メッセージを入力してください。' render :index end end
####create.json_jbuilder
create.json_jbuilder
1 2json.user_name @message.shop.name 3json.created_at @message.created_at.strftime("%Y年%m月%d日 %H時%M分") 4json.content @message.content 5json.id @message.id 6 7 8 9``` 10 11####message.js
$(function(){
function buildHTML(message){
let html =
<div class="MessageAll"> <div class="Iineimg"> <p class="Iine"> <img alt="いいね:" class="iine" src="/assets/heart-3c2a41f503ccb9ec8e27a3e00f4bbed496c2e78247236aa9a8f9843aa5eb2246.png"> </p> </div> <div class="MessageBox" data-message-id=${message.id}> <div class="use"> <div class="user1"> <div class="user1-name"> ${message.users_name} </div> <div class="user1-createdup"> ${message.created_at} </div> </div> <p class="Message__content"> ${message.content} </p> </div> </div> </div>
return html;
};
$('.form').on('submit', function(e){
e.preventDefault();
let formData = new FormData(this);
let url = $(this).attr('action')
$.ajax({
url: url,
type: "POST",
data: formData,
dataType: 'json',
processData: false,
contentType: false
})
.done(function(data){
let html = buildHTML(data);
})
});
});
### 試したこと ブラウザからの検証、ネットワークにエラー文が出ていないか確認したが、特になし。 js ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー