前提・実現したいこと
現在、こちらを参考に(https://qiita.com/nacasora/items/713919f7a56024f5c59f)掲示板を作ろうとしており、書き込まれた情報をjquaryのデータテーブルに表示しようと思っております。色々試したのですが、データテーブル内に書き込みを表示できずにいます。
現在の状態:
書き込みページ https://myapplication-d9e40.firebaseapp.com/
表示ページ https://myapplication-d9e40.firebaseapp.com/link/index.html
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
index.html
1<script> 2 $(document).ready(function () { 3 var url = "https://myapplication-d9e40.firebaseio.com/simplebbs/posts"; 4 // Jsonデータ取得 5 $.get(url, function (jsonData) { 6 7 }); 8}); 9 </script> 10 <script> 11 jQuery(function($){ 12 $("#foo-table").DataTable( { 13 data: data, 14 columns: [ 15 { data: 'content' }, 16 { data: 'date' }, 17 { data: 'locate0' }, 18 { data: 'locate1' }, 19 { data: 'locate2' }, 20 { data: 'name' }, 21 ] 22 }); 23}); 24 </script> 25</head> 26<body> 27 <div id ="replies"></div> 28 <table id="foo-table" class="table table-bordered"> 29 <thead> 30 <tr><th>名前</th> 31 <th>日付</th> 32 <th>内容</th> 33 <th>県</th> 34 <th>市</th> 35 <th>詳細</th></tr> 36 </thead> 37 <tbody> 38 </tbody> 39 </table> 40 41 42<script src="//cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js"></script> 43<script src="//cdn.datatables.net/1.10.16/js/dataTables.bootstrap4.min.js"></script> 44</body> 45</html> 46
main.js
1const main = ()=> 2 firebase.database().ref('/simplebbs/posts').limitToLast(10).on('value', snapshot=>{ 3 const posts = snapshot.exists() ? snapshot.val() : {} 4 let html = '' 5 for(const [id, {name, content, date, locate0, locate1, locate2}] of Object.entries(posts).reverse()) 6 html += makeReply(id, name, content, date, locate0, locate1, locate2) 7 document.querySelector('#replies').innerHTML = html 8 }) 9 10const makeReply = (id, name, content, locate0, locate1, locate2, date) => `<div class="reply"> 11 <div class="head">Name: ${name} <span class="date">${date}</span></div> 12 <div class="content">${content}</div> 13 <div class="locate0">${locate0}</div> 14 <div class="locate1">${locate1}</div> 15 <div class="locate2">${locate2}</div> 16 <button class="delete" onclick="deleteReply('${id}')">delete</button> </div>` 17 18const postReply = ()=> post('/api/post', { 19 name: document.querySelector('#reply-name').value, 20 content: document.querySelector('#reply-body').value, 21 key: document.querySelector('#reply-key').value, 22 locate0: document.querySelector('#reply-locate0').value, 23 locate1: document.querySelector('#reply-locate1').value, 24 locate2: document.querySelector('#reply-locate2').value, 25 }).then(e=>{ document.querySelector('#reply-body').value='' }) 26 27const deleteReply = id => post('/api/delete', {id, key: prompt('key?') || ''}) 28 29const post = (path, jsonData) => fetch(path, { 30 method: 'POST', body: JSON.stringify(jsonData), 31 headers: {'Accept': 'application/json', 'Content-Type': 'application/json'}, 32 }) 33 34document.addEventListener('DOMContentLoaded', main) 35
index.js
1const functions = require('firebase-functions') 2const admin = require('firebase-admin') 3admin.initializeApp(functions.config().firebase) 4const db = admin.database() 5const rep = s=> s.replace(/</g, '<').replace(/>/g, '>').replace(/\n/g,'<br>') 6 7exports.post = functions.https.onRequest((request, response)=>{ 8 const {name, content, key, locate0, locate1, locate2} = request.body 9 const date = new Date().toLocaleDateString() 10 db.ref('/simplebbs/posts').push({name:rep(name), content:rep(content), locate0:rep(locate0), locate1:rep(locate1), locate2:rep(locate2), date}) 11 .then(e=> db.ref(`/simplebbs/keys/${e.key}`).set(key)) 12 .then(e=> response.status(200).end()) 13}) 14 15exports.delete = functions.https.onRequest((request, response)=>{ 16 const {id, key} = request.body 17 db.ref(`/simplebbs/keys/${id}`).once('value').then(sKey=>{ 18 if(!sKey.exists() || sKey.val() !== key) 19 return response.status(400).send('invalid id or incorrect key').end() 20 db.ref(`/simplebbs/posts/${id}`).remove() 21 .then(e=> sKey.ref.remove()) 22 .then(e=> response.status(200).end()) 23 }) 24}) 25
試したこと
javascriptは初心者で検索できるところは試したのですがうまくいきません。
<div id ="replies"></div> が表示するテキストをデータテーブルに表示するにはどうしたらいいのでしょうか。また、別の方法がありましたら教えてください。よろしくお願いいたします。補足情報(FW/ツールのバージョンなど)
あなたの回答
tips
プレビュー