回答編集履歴
1
追記
answer
CHANGED
@@ -3,9 +3,18 @@
|
|
3
3
|
もし動かなくなったのなら、追加した部分を一度コメント化して動作を確認
|
4
4
|
そこから順番にコメント化の範囲を狭めれば大体のエラー箇所は判ります。
|
5
5
|
|
6
|
+
追記
|
7
|
+
送信を「同期」にするとruby側が応答しないので。
|
8
|
+
Javascript側で対応
|
9
|
+
|
6
10
|
```javascript
|
7
11
|
// クリックしたときの処理
|
12
|
+
var send_winorlose = false;
|
13
|
+
var XHR;
|
8
14
|
function winorlose_click(el){
|
15
|
+
if(send_winorlose) return; // 送信中は実行できない
|
16
|
+
send_winorlose = true; // 処理中とする
|
17
|
+
|
9
18
|
// el にはどこでクリックされたかの情報が入っている
|
10
19
|
var arr = el.target.id.split('_'); // idを'_'で分ける
|
11
20
|
var oppid = arr[0] + '_' + arr[2] + '_'+ arr[1]; // 反対側のid
|
@@ -49,16 +58,20 @@
|
|
49
58
|
}
|
50
59
|
}
|
51
60
|
|
52
|
-
//※ データの送信は処理の最後
|
61
|
+
//※ データの送信は処理の最後
|
53
|
-
//あとこの場合constではなくletを使いましょう。
|
54
|
-
//constはシステム的に定数となるときに使います。グローバル関数で指定しておくなら良いですが
|
55
|
-
// この関数内で数回指定するのであれば「let」または「var」を使いましょう。
|
56
|
-
//
|
62
|
+
//※ 非同期でも結果が返ってくるまでクリックを無視するように変更
|
57
63
|
let resultId = el.target.getAttribute("data-id");
|
64
|
+
if(!XHR){
|
58
|
-
|
65
|
+
XHR = new XMLHttpRequest();
|
59
|
-
XHR.open("GET", `/results/${resultId}`, false); //※非同期の場合は更新順番が必ず送った順番とならない。
|
60
|
-
|
66
|
+
XHR.responseType = "json";
|
67
|
+
XHR.onload = function() {
|
68
|
+
send_winorlose = false; // 送信完了
|
69
|
+
};
|
70
|
+
XHR.onerror = function() {
|
71
|
+
send_winorlose = false; // 送信完了
|
72
|
+
};
|
73
|
+
}
|
74
|
+
XHR.open("GET", `/results/${resultId}`, true);
|
61
75
|
XHR.send();
|
62
76
|
}
|
63
|
-
|
64
77
|
```
|