Q&A
前提
Java(Spring boot)、HTML(Thymeleaf)、Javascript(Ajax、jquery)を使用し、簡単なWebサービスを構築しています。
発生している問題
Ajaxを用いて、お気に入りボタンを押すとDBへそのお気に入りを追加できる機能を作りました。
その際にJQueryを用いて、お気に入りボタンを押すとそのボタンの表示が「お気に入り」→「お気に入り解除」に切り替わる処理を作成しました。
しかし、他の画面に遷移してから再度このお気に入りボタンを押せる画面に戻ってくると「お気に入り解除」と切り替えたはずのボタンも全て「お気に入り」の表示に戻ってしまいます。
実現したいこと
他の画面に遷移して、再びお気に入りボタンを押せる画面に戻っても一度切り替えた設定を維持させる方法
該当のソースコード
html
1<!--他の画面からお気に入りが押せる画面へ遷移するリンク--> 2 <a th:href="@{/main-page}"><img class="header-logo" src="logo.png" width="80px"></a> 3・ 4・ 5・ 6<form th:action="@{/execute-favorite}" method="post" > 7 <input type="submit" class="button" value="お気に入り" th:name="${article.id}" > 8 </form>
JavaScript
1$(function () { 2 $(document).on('submit', '.favorite-button', function () { 3 4 $.ajax({ 5 url: "http://localhost:8080/execute-favorite" 6 , type: 'POST' 7 , dataType: 'json' 8 , data: { 9 _csrf: $("*[name=_csrf]").val() 10 } 11 , async: true 12 }).done(function () { 13 console.log("通信成功!!") 14 }).fail(function () { 15 console.log("通信失敗、、、") 16 }).always(function () { 17 console.log("通信終了") 18 }) 19 }) 20 21//ボタン表示切り替えの処理 22 $('.button',this).on('click', function(){ 23 if($(this).val() === 'お気に入り'){ 24 $(this).val('お気に入り解除') 25 } else if($(this).val() === 'お気に入り解除'){ 26 $(this).val('お気に入り') 27 } 28 })
Java
1@RequestMapping("/execute-favorite") 2@ResponseBody 3 public void executeFavorite(@AuthenticationPrincipal LoginUser user, Integer id) { 4 if (favoriteService.load(user.getRegister().getId(), id).isEmpty()) { 5 favoriteService.insert(user.getRegister().getId(), id); 6 } else { 7 Favorite favorite = favoriteService.delete(user.getRegister().getId(), id); 8 favoriteService.delete(favorite.getId()); 9 } 10 }
回答2件
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2022/06/29 02:42