🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Q&A

解決済

1回答

1333閲覧

非同期通信でコメント機能を実装したい

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

0グッド

0クリップ

投稿2021/01/26 07:41

非同期通信でコメント機能を実装したい

Ruby on railsで記事投稿アプリを作成しています。
非同期通信でコメントを表示させたいのですが、途中の段階でレスポンスをコンソール上で確認しようとしているのですが、ブラウザが遷移してパラムスのみが表示される状態になってしまいコンソールに表示する事ができません。
初心者でわからないことばかりで、大変恐縮ですが解決方法をご教示いただけると幸いです。
なお、非同期でない通常のコメント機能は実装済です。

発生している問題・エラーメッセージ

イメージ説明

該当のソースコード

ruby

1class CommentsController < ApplicationController 2 def create 3 @article = Article.find(params[:article_id]) 4 @comment = Comment.new(comment_params) 5 if @comment.save 6 render json: {comment: @comment} 7 end 8 end 9 10 private 11 12 def comment_params 13 params.require(:comment).permit(:text).merge(user_id: current_user.id, article_id: params[:article_id]) 14 end 15end

ruby

1function post (){ 2 const submit = document.getElementById("submit_btn"); 3 submit.addEventListener("click", (e) => { 4 const formData = new FormData(document.getElementById("new_comment")); 5 const XHR = new XMLHttpRequest(); 6 XHR.open("POST", "/articles/:article_id/comments", true); 7 XHR.responseType = "json"; 8 XHR.send(formData); 9 XHR.onload = () => { 10 console.log(XHR.response.comment) 11 }; 12 e.preventDefault(); 13 }); 14} 15 16window.addEventListener('load', post);

ruby

1<div class="article-show-wrap"> 2 <div class="article flex-column"> 3 4 <div class="article-imgs pt-4 text-center"> 5 <%= image_tag @article.image.variant(resize: '700x500'), class:"article-box-img" %> 6 </div> 7 8 <section> 9 <% if user_signed_in? %> 10 <%if current_user.id == @article.user_id %> 11 <div class="buttons text-right mt-1"> 12 <%= link_to 'edit', edit_article_path, method: :get, class: "btn btn-outline-info shwbtn" %> 13 <%= link_to 'delete', article_path(@article), method: :delete, class:'btn btn-outline-danger shwbtn' %> 14 <% end %> 15 <% end %> 16 </section> 17 18 <section> 19 <h2 class="name text-center"> 20 <%= @article.title %> 21 </h2> 22 <div class="col-6 mx-auto"> 23 <div class="detail-article"> 24 <%= @article.memo %> 25 </div> 26 </div> 27 </section> 28 29 <section class="details mt-4"> 30 <h6 class="name text-center">been @ 31 <%= @article.place %> 32 </h6> 33 <h6 class="name text-center">date : 34 <%= @article.date %> 35 </h6> 36 </section> 37 </div> 38 39 <div class="comment-column flex-column m-5"> 40 <h4 class="text-center"> Comments <i class="far fa-comments"></i></h4> 41 <div class="col-5 mx-auto"> 42 <%= form_with model: [@article, @comment], local: true do |form| %> 43 <%= form.text_field :text, id:"new_comment", class:"comment-text-form", placeholder:"add a comment..." %> 44 <%= form.submit "post", class:"btn btn-sm btn-info", id:"submit_btn" %> 45 <% end %> 46 </div> 47 <% if @comments %> 48 <div class="comments", id="comments"> 49 <% @comments.each do |comment| %> 50 <div class="comment-case col-6 mx-auto m-1 case", id="comment_case"> 51 <strong class="h6"><%= link_to comment.user.nickname, "/users/#{comment.user_id}", classs: "comment-name" %> : </strong> 52 <p class="h6"><%= comment.text%></p> 53 <p class="text-right"><%= comment.created_at.strftime("%Y/%m/%d %H:%M") %></p> 54 </div> 55 <% end%> 56 </div> 57 <% end %> 58 </div> 59</div>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2021/01/26 08:24

途中段階という定義がわかりません。 どうなったときにどうしたいか具体的に説明して下さい
退会済みユーザー

退会済みユーザー

2021/01/26 09:23 編集

説明が足りずすいません。 入力したコメントを非同期でビューに表示させる前にフォームの入力内容が正しく取得できているのかコンソール上で確認したいのですが、コード内にconsole.logを記載しているにも関わらずページが遷移しビュー上にパラムス内容が表示されてしまいます。画面を遷移させずにコンソール上でフォームの入力内容を確認できるように修正したいと思っています。 よろしくお願い致します。
yambejp

2021/01/26 10:53 編集

サブミットしてるなら非同期処理じゃなくたんなるpost処理でページは遷移しますよね? 一旦HTMLに書き起こしてデバッグした方がわかりやすいと思います
guest

回答1

0

ベストアンサー

javascript

1<script> 2window.addEventListener('DOMContentLoaded', ()=>{ 3 document.querySelector("#submit_btn").addEventListener("click", (e) => { 4 const body = new FormData(); 5 body.append('test',document.querySelector("#new_comment").value); 6 const url="・・・"; 7 const method="post"; 8 fetch(url,{method,body}).then(res=>res.text()).then(console.log); 9 e.preventDefault(); 10 }); 11}); 12</script> 13<form> 14<input type="text" name="hoge" id="new_comment"> 15<input type="submit" value="send" id="submit_btn"> 16</form>

投稿2021/01/26 10:58

yambejp

総合スコア116694

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/01/27 01:42

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問