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

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

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

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

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

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

Q&A

解決済

1回答

2898閲覧

JQuery ajax通信 404エラー

Meitoku

総合スコア44

Ruby on Rails

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

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

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

0グッド

0クリップ

投稿2020/10/19 15:48

編集2020/10/20 11:45

現在こちらを参考に、ajax通信で多階層カテゴリを作ろうとしています
指定したid(親要素)にイベントが発生すると、発火するようにしているのですが、コンソールで以下のエラーが起こり、ajax通信に失敗します
ajax通信を成功させたいです
同じような実装を3箇所実装しようとしているのですが、2箇所はうまくいき1箇所でエラーです

jquery.self-bd7ddd393353a8d2480a622e80342adf488fb6006d667e8b42e4c0073393abee.js?body=1:10255 GET http://localhost:3000/forecasts/new 404 (Not Found)

####調べたこと
ターボリンクスについて jsファイルの先頭にターボリンクスを読み込ませる記述をしたが解消されず

NetWorkを確認
エラーが起きるjs

Request URL: http://localhost:3000/forecasts/new Request Method: GET Status Code: 404 Not Found Remote Address: [::1]:3000 Referrer Policy: strict-origin-when-cross-origin

正常に動くjs

Request URL: http://localhost:3000/tweets/new?tournament_id=1 Request Method: GET Status Code: 304 Not Modified Remote Address: [::1]:3000 Referrer Policy: strict-origin-when-cross-origin

####関係ありそうなファイル
Js

$(document).on('turbolinks:load', (function(){ function appendOption(category) { let html = `<option value="${category.id}" data-category="${category.id}">${category.name}</option>`; return html; } function appendChildrenBox(insertHTML) { let childSelectHtml = ""; childSelectHtml = `<p>勝利予想</p> <select name="forecast[win_school_id]" class="tournament_select_child" id="children_category"> <option value="" data-category="" >勝つと思う学校を選択してください</option> ${insertHTML}</select>` $(".win-school").append(childSelectHtml) childSelectHtml2 = `<p>敗退予想</p> <select name="forecast[lose_school_id]" class="tournament_select_child" id="children_category"> <option value="" data-category="" >負けると思う学校を選択してください</option> ${insertHTML}</select>` $(".lose-school").append(childSelectHtml2) } $("#parent_category_forecast").on("change",function(){ let parentCategory = $("parent_category_forecast").val(); if(parentCategory !=""){ $.ajax({ type: "GET", url: "/forecasts/new", data: {tournament_id: parentCategory}, dataType: "json" }) .done(function(children){ $(".win-school").empty(); $(".lose-school").empty(); let insertHTML = ""; children.forEach(function(child){ insertHTML += appendOption(child); }); appendChildrenBox(insertHTML); }) .fail(function(){ alert("error: 取得に失敗") }) } }); }));

コントローラー

class ForecastsController < ApplicationController before_action :set_category, only: [:new] def index @tweets = Forecast.includes(:user).page(params[:page]).per(5).order("created_at DESC") end def new @forecast = Forecast.new respond_to do |format| format.html format.json do @category_children = Category.find(params[:tournament_id]).children end end end private def set_category @category_parent_array = Category.where(ancestry: nil) end end

html

<div class="contents-fs"> <div class="form"> <%= form_with model: @forecast,local: true do |f| %> <h2> 投稿する <h2> <%=f.select :tournament_id, options_for_select( @category_parent_array.map{|c| [c[:name], c[:id]]},selected: @forecast.tournament_id),{include_blank:"大会を選択してください"}, { class: "parent_category_box", id: "parent_category_forecast"} %> <div class="win-school"></div> <div class="lose-school"></div> <%= f.text_area :text,cols: 30,rows: 10,value: "#{@forecast.text}"%> <%=f.submit value: "SENT",class: "game_record"%> <% end %> </div> </div>

json.jbuilder

json.array! @category_children do |child| json.id child.id json.name child.name end

###追記

ルーティング

Rails.application.routes.draw do root 'tops#index' devise_for :users resources :tweets do resources :comments,only:[:create,:destroy] resources :likes,only:[:create,:destroy] collection do get :search end end resources :tournaments,only:[:show] do member do get "watch" get "watch_avg" end end resources :analyses,only:[:index,:new,:create,:destroy,:edit,:update] resources :forecasts,only:[:index,:new,:create] resources :tops,only:[:index] end

コントローラー

class ForecastsController < ApplicationController before_action :set_category, only: [:new] def index @tweets = Forecast.includes(:user).page(params[:page]).per(5).order("created_at DESC") end def new @forecast = Forecast.new respond_to do |format| format.html format.json do @category_children = Category.find(params[:tournament_id]).children end end end private def set_category @category_parent_array = Category.where(ancestry: nil) end end

ターミナルのエラー
カテゴリにidが見つからない コントローラーに問題?

ActiveRecord::RecordNotFound (Couldn't find Category without an ID):

#解決
id(#)の指定忘れ
JSファイルでイベントがあったところのvalを取ってくる記述でidを指定するはずが、$("parent_category_forecast")でなっておりidでもクラスでもなかった
皆様ありがとうございました

$("#parent_category_forecast").on("change",function(){ let parentCategory = $("parent_category_forecast").val();

修正

$("#parent_category_forecast").on("change",function(){ let parentCategory = $("#parent_category_forecast").val();

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

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

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

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

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

m.ts10806

2020/10/19 20:52

サーバーサイドはRailsでしょうか。 タグを追加してください。サーバーサイドフレームワークを利用している場合、404の原因の半分以上はルーティングやコントローラにあると私は思います。
退会済みユーザー

退会済みユーザー

2020/10/19 22:50

404 エラーということは、要求はサーバーに届いていて、サーバーが url に指定されたリソースを探したが見つからないということです。なので、質問にある js のコードの、 url: "/forecasts/new" が間違っているのでは? 質問の「正常に動くjs」には /tweets/new と書いてありますけど?
Meitoku

2020/10/20 01:42

Railsを使っています 3箇所のパス?でjsを使っています そのうちの一つ(動かない方)が urlが"/forecasts/new"のページです ルーティング コントローラーを追記しましたが、問題ないように思えます
退会済みユーザー

退会済みユーザー

2020/10/20 01:55

もう一度書きますが、404 エラーということは、要求はサーバーに届いていて、サーバーが url に指定されたリソースを探したが見つからないということです。 理解されているでしょうか?
Meitoku

2020/10/20 02:13

はい、しています
退会済みユーザー

退会済みユーザー

2020/10/20 12:44

「なんらかの理由でサーバー側がないと言い張っている」ということでなければ、やっぱり理解してなかったのでは?
Meitoku

2020/10/20 13:21 編集

そうでした ビューが見つからないものだと思っていました 申し訳ありません
guest

回答1

0

ベストアンサー

  • 404エラーなら該当するファイルがないか、
  • なんらかの理由でサーバー側がないと言い張っているか

のどちらかでしょう。

投稿2020/10/20 00:52

yambejp

総合スコア114839

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問