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

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

新規登録して質問してみよう
ただいま回答率
85.35%
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回答

4806閲覧

XMLhttpRequestでsendするとエラーが発生する

Tochikawa7

総合スコア11

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クリップ

投稿2021/04/21 00:36

#解決したい課題について
現在、投稿にタグをつける際のインクリメンタルサーチ機能を実装しています。
新規投稿ページではうまく行きますが、同じ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

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

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

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

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

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

guest

回答1

0

ベストアンサー

XHR.open("GET", `ptaglist/?keyword=${keyword}`, true);

送信先が相対パスとなっていますが、それで間違いないのでしょうか。エラーメッセージの通りのパスに送信されています。

投稿2021/04/21 01:01

maisumakun

総合スコア146018

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

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

Tochikawa7

2021/04/21 05:21

原因はおっしゃる通りでした!!! ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問