ここに質問の内容を詳しく書いてください。
JavaでWebアプリケーションを作成しています。
その中で、Ajax通信を用いてタスクの完了・未完了を切り替えデータベースの値もtrue/falseで切り替えられるようにしたいです。
発生している問題・エラーメッセージ
Uncaught TypeError: Cannot read property 'attributes' of null
が発生しています。
該当のソースコード
HTML
1<!DOCTYPE html> 2<html xmlns:th="http://www.thymeleaf.org" 3 xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" 4 layout:decorate="~{layout/layout}"> 5<head> 6<script th:src="@{/webjars/jquery/1.11.1/jquery.min.js}"></script> 7<meta charset="UTF-8"></meta> 8<meta name="_csrf" th:content="${_csrf.token}" /> 9<meta name="_csrf_header" th:content="${_csrf.headerName}" /> 10<title>WorshipList</title> 11</head> 12<body> 13<div layout:fragment="content"> 14 <!-- コンテンツ部分 --> 15 <div th:fragment="worshipList_contents"> 16 <div class="page-header"> 17 <h1>お参り一覧</h1> 18 </div> 19 <table class="table table-bordered table-hover table-striped"> 20 <tr> 21 <th class="info col-sm-2" th:text="#{supporterName}">檀徒氏名</th> 22 <th class="info col-sm-2" th:text="#{worship}">お参り</th> 23 <th class="info col-sm-2" th:text="#{schedule}">日時</th> 24 <th class="info col-sm-2" th:text="#{remark}">備考</th> 25 <th class="info col-sm-2" th:text="#{done}">完了チェック</th> 26 </tr> 27 <tr th:each="worship : ${worshipList}" th:object="${worship}"> 28 <td th:text="*{supporterName}"></td> 29 <td th:text="*{worshipOpts.label}"></td> 30 <td th:text="*{schedule}"></td> 31 <td th:text="*{remark}"></td> 32 <td> 33 <button class="btn btn-warning" 34 th:style="'display:' + (${worship.progress} ? 'none' : '')" 35 th:onclick="|complete(this, '*{worshipId}',true)|" 36 th:text="#{incomplete}">未完了</button> 37 <button class="btn btn-secondary" 38 th:style="'display:' + (${worship.progress} ? '' : 'none')" 39 th:onclick="|complete(this, '*{worshipId}',false)|" 40 th:text="#{complete}">完了</button> 41 </td> 42 </tr> 43 </table> 44 45 <script type="text/javascript"> 46 console.log( document.querySelector("meta[name='_csrf']") ) 47 console.log( document.querySelector("meta[name='_csrf']").attributes['content'] ) 48 console.log( document.querySelector("meta[name='_csrf']").attributes['content'].value ) 49 var complete = function(element, worshipId, doComplete) { 50 const token = document.querySelector("meta[name='_csrf']").attributes['content'].value; 51 const header = document.querySelector( 52 "meta[name='_csrf_header']").attributes['content'].value; 53 const bgColor = document.getElementById(worshipId); 54 let url = doComplete ? "/complete" : "/incomplete"; 55 fetch(url, { 56 method: 'POST', 57 headers: { 58 "Content-Type": 'application/x-www-form-urlencoded', 59 [header]: token 60 }, 61 body: `worshipId=${worshipId}` 62 }).then( 63 response => { 64 if (doComplete) { 65 element.style.display = 'none'; 66 element.nextElementSibling.style.display = ''; 67 } else { 68 element.style.display = 'none'; 69 element.previousElementSibling.style.display = ''; 70 } 71 } 72 ); 73 } 74 75 </script> 76 </div> 77</div> 78</body> 79</html>
疑問
metaタグで指定したth:contentの中身がattributesの['content']に相当するものだと理解していますが、
なぜnullが返されるのか?
試したこと
console.logによるデバッグ
コンソールに上記のエラー以外表示されていませんでした。
回答1件
あなたの回答
tips
プレビュー