前提・実現したいこと chat-spaceというアプリの自動更新で画像が二枚投稿されてしまうバグを直したい
ここに質問の内容を詳しく書いてください。
初めての投稿です。よろしくお願いします。
chat-spaceというテキストと画像を投稿できるラインのようなアプリをエンジニアスクールの
課題で作っております。
使用言語はruby,ruby on rails,JavaScript(JQuery),
haml,scss,mysql、AWSです。
発生している問題・エラーメッセージ
JQweyで自動更新機能、インクリメンタルサーチ、非同期通信を実装してます。
今回のエラーは画像を投稿すると同じ写真が2枚もしくは3枚投稿されてしまうことです。
一枚だけちゃんと投稿される時もあり、少ない頻度で2枚以上投稿されてしまいます。
エラーメッセージ ありません。
該当のソースコード
app/assets/javascripts/message.js $(function(){ function buildHTML(message){ var content = message.content ? `${ message.content }` : ""; var imge = message.image ? `<img src= "${ message.image }">` : ""; var html = `<div class="message" data-message-id="${message.id}"> <div class="upper-message"> <div class="upper-message__user-name"> ${message.user_name} </div> <div class="upper-message__date"> ${message.date} </div> </div> <div class = "lower-message"> <p class="lower-message__content"> ${content} </p> </div> ${imge} </div>` return html; } $('#new_message').on('submit', function(e){ e.preventDefault(); var formData = new FormData(this); var url = $(this).attr('action') $.ajax({ url: url, type: "POST", data: formData, dataType: 'json', processData: false, contentType: false }) .done(function(data){ var html = buildHTML(data); $('.messages').append(html); $('.messages').animate({scrollTop: $('.messages')[0].scrollHeight}, 'fast'); $('form')[0].reset(); }) .fail(function(){ alert('error'); }); return false; }); var reloadMessages = function () { if (window.location.href.match(//groups/\d+/messages/)){ var last_message_id = $('.message:last').data("message-id"); $.ajax({ url: "api/messages", type: 'get', dataType: 'json', data: {id: last_message_id} }) .done(function(messages){ messages.forEach(function (message) { var insertHTML = buildHTML(message); $('.messages').append(insertHTML); $('.messages').animate({scrollTop: $('.messages')[0].scrollHeight}, 'fast'); }) }) .fail(function () { alert('自動更新に失敗しました'); }); } }; setInterval(reloadMessages, 10000); }); app/views/messages/create.json.jbuilder json.id @message.id json.user_name @message.user.name json.date @message.created_at.strftime("%Y年%m月%d日 %H時%M分") json.content @message.content json.image @message.image.url app/views/api/messages/index.json.jbuilder json.array! @messages do |message| json.content message.content json.image message.image.url json.date message.created_at.strftime("%Y/%m/%d %H:%M") json.user_name message.user.name json.id message.id end
試したこと
画像を一枚投稿したいのに2枚以上投稿されてしまう。バグです。
エラーメッセージや、検証でコンソールを確認してもエラーはでません。
同じ画像が投稿されてしまうのですが、日付の表記が違うことから、
app/views/messages/create.json.jbuilderから投稿されている画像と
app/views/api/messages/index.json.jbuilderから投稿されている画像と判断できます。
自動更新機能と投稿した瞬間が被ってしまい、複数投稿されてしまうバグが発生しているのだと考えています。
対策としてsetInterval(reloadMessages, 10000);の数値を増やして、自動更新の頻度をへらしてみたりしたのですが、完全になくすができません。
協力お願いします。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/24 02:56
2019/10/24 03:22
2019/10/24 04:41
2019/10/24 04:51
2019/10/24 04:58
2019/10/24 08:32