teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

補足

2020/01/21 21:20

投稿

raurauji
raurauji

スコア13

title CHANGED
File without changes
body CHANGED
@@ -4,7 +4,7 @@
4
4
  ```
5
5
  ###発生している問題・エラーメッセージ
6
6
  ```
7
- エラーは起こっていないのですが、自分が送ったメッセージが相手側の画面上に非同期で更新される機能がうまく行きません。
7
+ エラーは起こっていないのですが、自分が送ったメッセージが相手側の画面上に非同期で更新される機能がうまく行きません。リロードすれば両者ともメッセージは表示されます。
8
8
  ```
9
9
  ###ソースコード
10
10
 

2

ソースコードの追加

2020/01/21 21:20

投稿

raurauji
raurauji

スコア13

title CHANGED
File without changes
body CHANGED
@@ -7,8 +7,101 @@
7
7
  エラーは起こっていないのですが、自分が送ったメッセージが相手側の画面上に非同期で更新される機能がうまく行きません。
8
8
  ```
9
9
  ###ソースコード
10
+
11
+ ###app/assets/javascripts/message.js
10
12
  ```
13
+ $(function(){
14
+ function buildHTML(message){
15
+ if ( message.image ) {
16
+ var html =
17
+ `<div class="main-chat__message-list__message" data-message-id=${message.id}>
18
+ <div class="main-chat__message-list__message__top">
19
+ <div class="main-chat__message-list__message__top__name">
20
+ ${message.user_name}
21
+ </div>
22
+ <div class="main-chat__message-list__message__top__date">
23
+ ${message.created_at.strftime("%Y年%m月%d日 %H時%M分")}
24
+ </div>
25
+ </div>
26
+ <div class="main-chat__message-list__message__bottom">
27
+ <p class="main-chat__message-list__message__bottom__text">
28
+ ${message.content}
29
+ </p>
30
+ </div>
31
+ <img src=${message.image} >
32
+ </div>`
33
+ return html;
34
+ } else {
35
+ var html =
36
+ `<div class="main-chat__message-list__message" data-message-id=${message.id}>
37
+ <div class="main-chat__message-list__message__top">
38
+ <div class="main-chat__message-list__message__top__name">
39
+ ${message.user_name}
40
+ </div>
41
+ <div class="main-chat__message-list__message__top__date">
42
+ ${message.created_at}
43
+ </div>
44
+ </div>
45
+ <div class="main-chat__message-list__message__bottom">
46
+ <p class="main-chat__message-list__message__bottom__text">
47
+ ${message.content}
48
+ </p>
49
+ </div>
50
+ </div>`
51
+ return html;
52
+ };
53
+ }
54
+ $('#new_message').on('submit', function(e){
55
+ e.preventDefault();
56
+ var formData = new FormData(this);
57
+ var url = $(this).attr('action')
58
+ $.ajax({
59
+ url: url,
60
+ type: "POST",
61
+ data: formData,
62
+ dataType: 'json',
63
+ processData: false,
64
+ contentType: false
65
+ })
66
+ .done(function(data){
67
+ var html = buildHTML(data);
68
+ $('.main-chat__message-list').append(html);
69
+ $('.main-chat__message-list').animate({ scrollTop: $('.main-chat__message-list')[0].scrollHeight});
70
+ $('form')[0].reset();
71
+ $('.form__submit').prop('disabled', false);
72
+ })
73
+
74
+ var reloadMessages = function() {
75
+ last_message_id = $('.main-chat__message-list__message:last').data("message-id");
76
+ $.ajax({
77
+ url: "api/messages",
78
+ type: 'get',
79
+ dataType: 'json',
80
+ data: {id: last_message_id}
81
+ })
82
+ .done(function(messages) {
83
+ if (messages.length !== 0) {
84
+ var insertHTML = '';
85
+ $.each(messages, function(i, message) {
86
+ insertHTML += buildHTML(message)
87
+ });
88
+ $('.main-chat__message-list').append(insertHTML);
89
+ $('.main-chat__message-list').animate({ scrollTop: $('.main-chat__message-list')[0].scrollHeight});
90
+ $('#new_message')[0].reset();
91
+ $('.form__submit').prop('disabled', false);
92
+ }
93
+ })
94
+ .fail(function() {
95
+ console.log('error');
96
+ });
97
+ if (document.location.href.match(//groups/\d+/messages/)) {
98
+ setInterval(reloadMessages, 7000);
99
+ }
100
+ };
101
+ });
102
+ });
103
+
104
+ ```
11
105
  githubのリンクを貼っておきます。"JavaScript/message.js"に重点をおいて見ていただけるとわかりやすいかと思います。
12
106
  https://github.com/momotarou1090/chat-space3.git
13
- ブランチはauto-renewブランチです。
107
+ ブランチはauto-renewブランチです。
14
- ```

1

補足

2020/01/21 21:08

投稿

raurauji
raurauji

スコア13

title CHANGED
File without changes
body CHANGED
@@ -10,4 +10,5 @@
10
10
  ```
11
11
  githubのリンクを貼っておきます。"JavaScript/message.js"に重点をおいて見ていただけるとわかりやすいかと思います。
12
12
  https://github.com/momotarou1090/chat-space3.git
13
+ ブランチはauto-renewブランチです。
13
14
  ```