#解決したい課題について
現在、投稿にタグをつける際のインクリメンタルサーチ機能を実装しています。
新規投稿ページではうまく行きますが、同じJSファイルを編集ページにも適用すると、XML.send();の部分でエラーが発生してしまいます。
エラーの原因と解消をしたいです。よろしくお願いします
エラー内容
terminal
1ptag.js:16 GET http://localhost:3000/practices/3/ptaglist/?keyword=%E3%81%A0 404 (Not Found)
#試したこと
・新規投稿ページのとの差異を確認しました。→JSファイルに影響しそうなところはありませんでした。
・debuggerで逐一の挙動を確認しましたが、新規投稿ページの場合と変わりはありませんでした。
#コード
new.html.erb
new.html.erb
1<div class="form-group"> 2 <label>タグ</label> 3 <%= f.text_field :name, placeholder:",で区切ってください",class: "form-control" %> 4</div> 5 6<div id="search-result"></div>
edit.html.erb
edit.html.erb
1<div class="form-group"> 2 <label>タグ</label> 3 <%= f.text_field :name, placeholder:",で区切ってください",class: "form-control" %> 4</div> 5 6<div id="search-result"></div>
tweets_controllers.rb
tweets_controllers.rb
1 2def new 3 @tweet=TweetsPtag.new 4end 5 6def edit 7 @tweets_ptag=TweetsPtag.new(title:@tweet.title,content:@tweet.content) 8end 9 10 11def ptaglist 12 return nil if params[:keyword] == "" 13 ptag = Ptag.where(['name LIKE ?', "%#{params[:keyword]}%"] ) 14 render json:{ keyword: ptag } 15end
ptag.js
js
1 2if (location.pathname.match("/new")||location.pathname.match("/edit")/*||location.pathname.match("practices")*/){ 3 document.addEventListener("DOMContentLoaded", () => { 4 const inputElement = document.getElementById("practices_ptag_name"); 5 inputElement.addEventListener("keyup", () => { 6 let keyword = document.getElementById("practices_ptag_name").value; 7 console.log(keyword); 8 9 if(keyword.includes(',')){ 10 keyword=keyword.substring(keyword.lastIndexOf(',')+1,keyword.length-1); 11 console.log(keyword); 12 } 13 14 const XHR = new XMLHttpRequest(); 15 XHR.open("GET", `ptaglist/?keyword=${keyword}`, true); 16 XHR.responseType = "json"; 17 XHR.send(); ################################ここでエラー発生!!!!!!!!!!!!!!!!!!!!!!! 18 console.log(XHR.readyState); 19 XHR.onload=()=>{ 20 const searchResult = document.getElementById("search-result"); 21 searchResult.innerHTML = ""; 22 if (XHR.response) { 23 const tagName = XHR.response.keyword; 24 tagName.forEach((ptag) => { 25 const childElement = document.createElement("div"); 26 childElement.setAttribute("class", "child"); 27 childElement.setAttribute("id", ptag.id); 28 childElement.innerHTML = ptag.name; 29 searchResult.appendChild(childElement); 30 const clickElement = document.getElementById(ptag.id); 31 32 clickElement.addEventListener("click", () => { 33 let tagForm= document.getElementById("practices_ptag_name") ; 34 tagForm.value=tagForm.value.substring(tagForm.value.lastIndexOf(",")+1,tagForm.value.lastIndexOf(",")-tagForm.length); 35 tagForm.value=tagForm.value.concat(clickElement.innerText); 36 console.log(clickElement.innerText); 37 console.log(`tagForm=${tagForm.value+clickElement.innerText}`); 38 clickElement.remove(); 39 }); 40 }); 41 }; 42 }; 43 }); 44 }); 45}; 46
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/21 05:21