質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

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

JavaScript

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

1回答

276閲覧

入力した値を非同期通信で合計表示させたい

find4423

総合スコア0

Ruby on Rails

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

JavaScript

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2022/07/01 08:38

編集2022/07/01 09:47

歩数を記録するにあたって、合計値を非同期通信で出力させたい。

以下のようなuserのマイページで歩数の合計を非同期通信にて、表示させたいです。

↓/views/users/show

<%# 歩数カウント 表示を変えたい部分 %> <div id="step-sum"> <%= @steps.values.sum %> </div> <%# /歩数カウント %> <% if @user == current_user %> <div class="active-form"> <%= form_with url:actives_path, id:"step-form", local: true do |f| %> <div class="form-step"> <%= f.text_field :step, class:"step-input", id:"active-step" %> </div> <div class="form-submit"> <%= f.submit "歩数を記録", class:"form-btn", id: "step-submit"%> </div> <% end %> </div> 割愛

↓js

function step () { const submit = document.getElementById("step-submit") submit.addEventListener("click", (e) => { e.preventDefault(); const step_form = document.getElementById("step-form"); const formStepData = new FormData(step_form); const XHR = new XMLHttpRequest(); XHR.open("POST", "/actives", true); XHR.responseType = "json"; XHR.send(formStepData); XHR.onload = () => { const step_count =document.getElementById("step-sum"); const formStep =document.getElementById("active-step"); const item = XHR.response.step; step_count.innerHTML=` <div class="step-sum"> ${item.step} </div>`; }; }); }; window.addEventListener('load', step)

↓UsersController

class UsersController < ApplicationController def show @user = User.find(params[:id]) @posts = @user.posts @steps = Active.where(user_id: current_user.id).group(:user_id).sum(:step) end end

↓歩数を記録するActivesController

class ActivesController < ApplicationController def create step = Active.create(active_params) render json:{ step: step } end private def active_params params.permit(:step).merge(user_id: current_user.id) end end

状況、確認

onloadまでで、値の保存ができているところまで確認済みです。
今の挙動だと、歩数を記録したあと、

{"step":{"id":27,"step":500,"user_id":2,"created_at":"2022-07-01T08:15:40.072Z","updated_at":"2022-07-01T08:15:40.072Z"}}

だけが表示される画面に遷移してしまいます。これは、Userコントローラー内のshowアクションからActivesコントローラー内でrenderしているからrenderの指定先が間違えているということでしょうか。
また、合計数の表記も非同期通信する前なら<%= @steps.values.sum %>で表示できていましたが、
innerHTMLだとどういった表記が適切なのでしょうか?
よろしくお願いします。

回答受付後

insertAdjacentHTMLに変更。
思った位置に表記させることはできたが、数値の取り出し方、合計表記がわからず。

insertAdjacentHTMLでは、上に配置されるだけなのでinnerHTMLにして置き換わるように${item.step}で入力された値は置き変わりして表示されるように!!合計の出力の方が、わからず、、、

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

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

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

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

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

guest

回答1

0

afterbeginを指定しているのであればinnerHTMLではなくinsertAdjacentHTMLでは?
いまさらXHRで処理するのはどうかとおもうのでできればfetchに切り替えてください

投稿2022/07/01 08:50

yambejp

総合スコア114769

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

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

find4423

2022/07/01 09:07

間違えておりました、すいません、ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問