前提・実現したいこと
非同期通信を使って(Ajax)json形式でストップウォッチの時間をid="rap"を押したときに取得してDBに保存したい。
発生している問題・エラーメッセージ
すべてのパラメータがnilで返ってくる
該当のソースコード
new
1<%# タイマーの時間表示 %> 2<div class="stop-watch"> 3 <p id="time">00:00:00.000</p> 4</div> 5 6<%# STARTとSTOPのボタン %> 7<%= form_with url: watches_path, class: "buttons" do |f| %> 8 <%= f.submit "START", class: "btn", id: "start" %> 9 <%= f.submit "RAP", class: "btn", id: "rap" %> 10<% end %>
controller
1def create 2 @watch = Watch.create(watch: params[:watch]) 3 render json:{ watch: @watch } 4end
javascript
1function addRap() { 2 const XHR = new XMLHttpRequest(); 3 const time = document.getElementById("time").innerHTML; 4 XHR.open("POST", "/watches", true); 5 XHR.setRequestHeader('content-type', 'application/json') 6 XHR.onreadystatechange = () => { 7 if (this.readyState === XMLHttpRequest.DONE && this.status === 200) { 8 const content = XHR.response; 9 console.log(content) 10 } 11 }; 12 XHR.send("watch="+time); //400(Bad Error) 13 } 14 15 rap.addEventListener('click', (e) => { 16 addRap(); 17 e.preventDefault(); 18 } 19 });
routes
1Rails.application.routes.draw do 2 devise_for :users 3 4 resources :watches, only: [:index, :new, :create] 5end
addEventListner
でクリックしたときにaddRap()
を発火させています。
試したこと
controllerでストロングパラメータを指定した
最後に
過不足あるかと思いますがよろしくおねがいします。
回答2件
あなたの回答
tips
プレビュー