質問編集履歴
12
解決したコードに修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -15,26 +15,38 @@
|
|
15
15
|
|
16
16
|
###該当のソースコード
|
17
17
|
```php
|
18
|
+
Point.php
|
19
|
+
class Point extends AppModel {
|
20
|
+
public function sumByUserId($userId) {
|
21
|
+
$data = $this->find('all',
|
22
|
+
array(
|
23
|
+
'conditions'=> array('user_id' => $userId),
|
24
|
+
'fields' => array('sum(point) as sumPoints'),
|
25
|
+
)
|
26
|
+
);
|
27
|
+
return $data['0']['0']['sumPoints'];
|
28
|
+
}
|
29
|
+
}
|
30
|
+
```
|
31
|
+
```php
|
18
32
|
PointsController
|
19
33
|
他のコード省略
|
20
34
|
public function beforeFilter() {
|
21
35
|
parent::beforeFilter();
|
22
|
-
$
|
36
|
+
$userId = $this->Auth->user('id');
|
23
|
-
|
37
|
+
$beforeP = $this->Point->sumByUserId($userId);
|
24
|
-
array(
|
25
|
-
'conditions'=> array('user_id' => $id),
|
26
|
-
'fields' => array('sum(point) as sumPoints'),
|
27
|
-
)
|
28
|
-
);
|
29
|
-
$beforeP = $data['0']['0']['sumPoints'];
|
30
|
-
|
38
|
+
$this->set(compact('beforeP'));
|
31
39
|
}
|
32
40
|
|
33
|
-
|
34
41
|
public function index() {
|
35
42
|
$this->set('videos', $this->Video->find('all'));
|
43
|
+
}
|
44
|
+
|
45
|
+
public function addPoint() {
|
36
|
-
|
46
|
+
if (!$this->request->is('ajax')) {
|
37
|
-
|
47
|
+
throw new BadRequestException();
|
48
|
+
}
|
49
|
+
$userId = $this->Auth->user('id');
|
38
50
|
$data = array(
|
39
51
|
'Point' => array(
|
40
52
|
'user_id' => $this->Auth->user('id'),
|
@@ -43,45 +55,38 @@
|
|
43
55
|
);
|
44
56
|
$this->Point->create();
|
45
57
|
$this->Point->save($data);
|
58
|
+
|
59
|
+
$afterP = $this->Point->sumByUserId($userId);
|
60
|
+
$this->viewClass = 'json';
|
61
|
+
$this->set(compact('afterP'));
|
62
|
+
$this->set('_serialize', array('afterP'));
|
63
|
+
//$this->set('_serialize',(res));のまま使ってしまい気付ずこの時間になってしまいました。
|
46
64
|
}
|
47
|
-
$id = $this->Auth->user('id');
|
48
|
-
$data = $this->Point->find('all',
|
49
|
-
array(
|
50
|
-
'conditions'=> array('user_id' => $id),
|
51
|
-
'fields' => array('sum(point) as sumPoints'),
|
52
|
-
)
|
53
|
-
);
|
54
|
-
$afterP = $data['0']['0']['sumPoints'];
|
55
|
-
$this->set(compact('afterP'));
|
56
|
-
return;
|
57
|
-
}
|
58
65
|
```
|
66
|
+
|
59
67
|
```javascript
|
60
68
|
point.js
|
61
69
|
他のコード省略
|
62
70
|
$(".send").on("click",function(){
|
63
71
|
$.ajax({
|
64
|
-
|
72
|
+
type: "POST",
|
65
|
-
|
73
|
+
url: "/aaa/bbb/addPoint",
|
66
|
-
|
74
|
+
dataType: "json", //やっとjsonで動きました!有難うございます。
|
67
|
-
|
75
|
+
data: {
|
68
|
-
|
76
|
+
"point": point
|
69
77
|
},
|
70
|
-
|
78
|
+
success: function(res) {
|
71
|
-
|
79
|
+
//モーダルを閉じる処理;
|
72
|
-
|
80
|
+
//次の動画を呼び出す処理;
|
81
|
+
$('#sumPoints').text(res.afterP);
|
82
|
+
},
|
83
|
+
error: function(XMLHttpRequest, textStatus, errorThrown) {
|
84
|
+
alert('Error : ' + errorThrown);
|
73
|
-
|
85
|
+
}
|
74
|
-
$('#sumPoint').text(afterP);
|
75
|
-
|
86
|
+
});
|
76
|
-
error: function(XMLHttpRequest, textStatus, errorThrown) {
|
77
|
-
|
87
|
+
return false;
|
78
|
-
|
88
|
+
}
|
79
|
-
});
|
80
|
-
console.log(afterP);
|
81
|
-
return false;
|
82
|
-
}
|
83
89
|
});
|
84
|
-
|
85
90
|
```
|
86
91
|
```html
|
87
92
|
index.ctp
|
@@ -95,12 +100,12 @@
|
|
95
100
|
}
|
96
101
|
|
97
102
|
$videos = json_safe_encode($videos);
|
98
|
-
$afterP = json_safe_encode($afterP);
|
103
|
+
//$afterP = json_safe_encode($afterP);(削除)
|
99
104
|
?>
|
100
105
|
|
101
106
|
<script>
|
102
107
|
var videos = JSON.parse('<?php echo $videos; ?>');
|
103
|
-
var afterP = JSON.parse('<?php echo $afterP; ?>');
|
108
|
+
//var afterP = JSON.parse('<?php echo $afterP; ?>');(削除)
|
104
109
|
</script>
|
105
110
|
```
|
106
111
|
|
11
exit;の削除
title
CHANGED
File without changes
|
body
CHANGED
@@ -43,7 +43,6 @@
|
|
43
43
|
);
|
44
44
|
$this->Point->create();
|
45
45
|
$this->Point->save($data);
|
46
|
-
exit;
|
47
46
|
}
|
48
47
|
$id = $this->Auth->user('id');
|
49
48
|
$data = $this->Point->find('all',
|
10
発生している問題を追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
###発生している問題・エラーメッセージ
|
6
6
|
|
7
7
|
非同期通信にてモーダルを閉じる処理、次の動画を呼び出す処理及びDBにデータを保存するまでは実行できましたが、送信後の値(afterP)が送信前(beforeP)の値となってしまう。
|
8
|
-
|
8
|
+
手動でブラウザのリロードを行うと送信後の値(afterP)を取得できるが、元の動画に戻ってしまう。
|
9
9
|
```
|
10
10
|
|
11
11
|
dataType:"json"にすると送信時にアラートが表示
|
9
エラー内容の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -9,7 +9,7 @@
|
|
9
9
|
```
|
10
10
|
|
11
11
|
dataType:"json"にすると送信時にアラートが表示
|
12
|
-
SyntaxError: Unexpected
|
12
|
+
Error : SyntaxError: Unexpected end of JSON inputが出てしまい次に進みません。
|
13
13
|
index.ctpのJSON.encodeと JSON.parseを外すと上記エラーは出ませんが、videosの値をjsファイルに渡す方法がわからず外せていません。
|
14
14
|
```
|
15
15
|
|
8
コードの改善
title
CHANGED
File without changes
|
body
CHANGED
@@ -42,22 +42,19 @@
|
|
42
42
|
)
|
43
43
|
);
|
44
44
|
$this->Point->create();
|
45
|
-
$
|
45
|
+
$this->Point->save($data);
|
46
46
|
exit;
|
47
47
|
}
|
48
|
-
if($pointSave !== false){
|
49
|
-
|
48
|
+
$id = $this->Auth->user('id');
|
50
|
-
|
49
|
+
$data = $this->Point->find('all',
|
51
50
|
array(
|
52
51
|
'conditions'=> array('user_id' => $id),
|
53
52
|
'fields' => array('sum(point) as sumPoints'),
|
54
53
|
)
|
55
|
-
|
54
|
+
);
|
56
|
-
|
55
|
+
$afterP = $data['0']['0']['sumPoints'];
|
57
|
-
|
56
|
+
$this->set(compact('afterP'));
|
58
|
-
}
|
59
57
|
return;
|
60
|
-
}
|
61
58
|
}
|
62
59
|
```
|
63
60
|
```javascript
|
7
index\.ctp function json_safe_encode\(\$data\)を追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -93,8 +93,15 @@
|
|
93
93
|
<p>送信前:<?php echo $beforeP; ?> pt</p>
|
94
94
|
<p>送信後:<span id="sumPoint"></span> pt</p>
|
95
95
|
|
96
|
+
<?php
|
97
|
+
function json_safe_encode($data){
|
98
|
+
return json_encode($data, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT);
|
99
|
+
}
|
100
|
+
|
96
|
-
|
101
|
+
$videos = json_safe_encode($videos);
|
97
|
-
|
102
|
+
$afterP = json_safe_encode($afterP);
|
103
|
+
?>
|
104
|
+
|
98
105
|
<script>
|
99
106
|
var videos = JSON.parse('<?php echo $videos; ?>');
|
100
107
|
var afterP = JSON.parse('<?php echo $afterP; ?>');
|
6
タグの追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -75,7 +75,7 @@
|
|
75
75
|
//モーダルを閉じる処理;
|
76
76
|
//次の動画を呼び出す処理;
|
77
77
|
}
|
78
|
-
|
78
|
+
$('#sumPoint').text(afterP);
|
79
79
|
},
|
80
80
|
error: function(XMLHttpRequest, textStatus, errorThrown) {
|
81
81
|
alert('Error : ' + errorThrown);
|
5
コード訂正
title
CHANGED
File without changes
|
body
CHANGED
@@ -45,7 +45,7 @@
|
|
45
45
|
$pointSave = $this->Point->save($data);
|
46
46
|
exit;
|
47
47
|
}
|
48
|
-
if(pointSave !== false){
|
48
|
+
if($pointSave !== false){
|
49
49
|
$id = $this->Auth->user('id');
|
50
50
|
$data = $this->Point->find('all',
|
51
51
|
array(
|
4
コード修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -4,13 +4,13 @@
|
|
4
4
|
|
5
5
|
###発生している問題・エラーメッセージ
|
6
6
|
|
7
|
-
非同期通信にてモーダルを閉じる処理、次の動画を呼び出す処理及びDBにデータを保存するまでは実行できましたが、送信後の値(afterP)が
|
7
|
+
非同期通信にてモーダルを閉じる処理、次の動画を呼び出す処理及びDBにデータを保存するまでは実行できましたが、送信後の値(afterP)が送信前(beforeP)の値となってしまう。
|
8
8
|
|
9
9
|
```
|
10
|
-
|
10
|
+
|
11
11
|
dataType:"json"にすると送信時にアラートが表示
|
12
12
|
SyntaxError: Unexpected token < in JSON at position 1が出てしまい次に進みません。
|
13
|
-
index.ctpのJSON.encodeと JSON.parseを外すと上記エラーは出ませんが、videosの値をjsに渡す方法がわからず外せていません。
|
13
|
+
index.ctpのJSON.encodeと JSON.parseを外すと上記エラーは出ませんが、videosの値をjsファイルに渡す方法がわからず外せていません。
|
14
14
|
```
|
15
15
|
|
16
16
|
###該当のソースコード
|
@@ -43,6 +43,8 @@
|
|
43
43
|
);
|
44
44
|
$this->Point->create();
|
45
45
|
$pointSave = $this->Point->save($data);
|
46
|
+
exit;
|
47
|
+
}
|
46
48
|
if(pointSave !== false){
|
47
49
|
$id = $this->Auth->user('id');
|
48
50
|
$data = $this->Point->find('all',
|
@@ -51,10 +53,10 @@
|
|
51
53
|
'fields' => array('sum(point) as sumPoints'),
|
52
54
|
)
|
53
55
|
);
|
54
|
-
|
56
|
+
$afterP = $data['0']['0']['sumPoints'];
|
55
|
-
|
57
|
+
$this->set(compact('afterP'));
|
58
|
+
}
|
56
59
|
return;
|
57
|
-
}
|
58
60
|
}
|
59
61
|
}
|
60
62
|
```
|
3
コード修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -88,7 +88,7 @@
|
|
88
88
|
```html
|
89
89
|
index.ctp
|
90
90
|
他のコード省略
|
91
|
-
<p>送信前:<?php
|
91
|
+
<p>送信前:<?php echo $beforeP; ?> pt</p>
|
92
92
|
<p>送信後:<span id="sumPoint"></span> pt</p>
|
93
93
|
|
94
94
|
<?php $videos = json_encode($videos); ?>
|
2
表題の修正
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
cakephp2系 非同期通信にて得た値をリアルタイムに表示させたい。
|
1
|
+
cakephp2系 非同期通信にて取得した値をリアルタイムに表示させたい。
|
body
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
###前提・実現したいこと
|
2
2
|
|
3
|
-
非同期通信にて得た値をDBに登録し、送信後の値をリアルタイムに表示させたい。
|
3
|
+
非同期通信にて取得した値をDBに登録し、送信後の値をリアルタイムに表示させたい。
|
4
4
|
|
5
5
|
###発生している問題・エラーメッセージ
|
6
6
|
|
1
url: "index",をurl: "",に修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -64,7 +64,7 @@
|
|
64
64
|
$(".send").on("click",function(){
|
65
65
|
$.ajax({
|
66
66
|
type: "POST",
|
67
|
-
url: "
|
67
|
+
url: "",
|
68
68
|
dataType: "text",// "json"にするとSyntaxError: Unexpected token < in JSON at position 1
|
69
69
|
data: {
|
70
70
|
"point" : point
|