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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

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

JavaScript

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

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Ajax

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

Q&A

0回答

989閲覧

[rails6] いいね機能を非同期通信(ajax)にしたいが処理がリロードしないと反映されない…

kazuki_0311

総合スコア7

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

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

JavaScript

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

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Ajax

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

0グッド

2クリップ

投稿2020/03/05 14:58

編集2020/03/06 12:17

前提・実現したいこと

いいね機能を非同期通信(ajax)にしたいです。
リロードすればいいね機能は使えるのですが、非同期通信にはなりません…

一応リロードすれば下記画像のようにいいね機能は作動してはいます。
イメージ説明

イメージ説明

発生している問題・エラーメッセージ

ログにはエラーは出ていないのですが、
デペロッパーツールで処理の確認をしたところ

VM548:1 Uncaught SyntaxError: Unexpected token '<' at processResponse (rails-ujs.js:283) at rails-ujs.js:196 at XMLHttpRequest.xhr.onreadystatechange (rails-ujs.js:264)

というエラーが出ていることに気付きました。

該当のソースコード

app/views/likes/index.js.slim↓

javascript: $('#like_btn').html("<%= escape_javascript(render (partial: 'likes/like', locals: {post: @post}))%>")

app/assets/javascripts/application.js↓

//= require jquery3 //= require jquery_ujs //= require jquery.turbolinks //= require_tree . //= require_self //= require popper //= require bootstrap-sprockets

app/views/posts/show.html.slim↓

. . . #like_btn = render 'likes/like', post: @post,like: @like . . .

app/views/likes/_like.html.slim↓

- if @post.like?(@post,current_user) = link_to post_like_path(post.id,id: post), method: :delete, remote: true do i class="far fa-heart unlike-btn" - else = link_to post_likes_path(post.id,id: post), method: :post, remote: true do i class="fas fa-heart like-btn" end

試したこと

いろいろ試した結果、最終的にデペロッパーツールで発見した、
「VM548:1 Uncaught SyntaxError: Unexpected token '<」
というエラーにたどり着いてしまいました。

このエラーの意味を調べてみたら文法やスペルミスなどから出るエラーだとは分かったので、javascriptのコードを修正すれば恐らく解決できるのかな?とは思うのですが、javascriptに関しては超初心者なため正しいコードの書き方がわかりませんでした。泣

上記のコード情報以外に必要な情報があればすぐに対応しますので、先輩方のお力をお借しいただけないでしょうか。
ご教授よろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

ruby2.6.5
rails 6
vscode
sqlite3(ローカル環境)
ターミナル

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/03/05 21:22

エラーが発生したコードはそれを含むメソッド単位で上げるべき
mongolia

2020/03/06 01:24

app/views/likes/index.js.slim $('#like_btn').html("<%= escape_javascript(render (partial: 'likes/like', locals: {post: @post}))%>") app/assets/javascripts/application.js↓ 上記で、 console.log("<%= escape_javascript(render (partial: 'likes/like', locals: {post: @post}))%>"); のようにすると、ブラウザー開発者ツールのコンソールに何が出力されますか?
kazuki_0311

2020/03/06 12:18

asahina1979さん、承知しました。 修正いたしました。 アドバイスありがとうございます!
kazuki_0311

2020/03/06 12:28

mongoliaさん 教えていただいたコードでも同じように、デペロッパーツールには下記のエラーログが出ていました。 VM1312:1 Uncaught SyntaxError: Unexpected token '<' at processResponse (rails-ujs.js:283) at rails-ujs.js:196 at XMLHttpRequest.xhr.onreadystatechange (rails-ujs.js:264) あと、もう1つこのようなログもコンソールに出力されていました。↓ on_content_end ==>response to loadPagePattern, href=http://localhost:3000/posts/15, pattern.id=undefined 未定義?
kazuki_0311

2020/03/06 13:09

すみません。ようやく意味がわかりました。(多分) console.logはjavascriptのデバックに使うコードなんですね。 いいねボタンを押して、デペロッパーツールのコンソールを開き、そこに使用して何が出力されるか確認するということで合っていますでしょうか? 一応試してみたところ、 <%= escape_javascript(render (partial: 'likes/like', locals: {post: @post}))%> が出力されていました。 確認方法が間違っていたら教えてください汗
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問