質問編集履歴

12

解決したコードに修正

2016/06/03 14:06

投稿

milkif
milkif

スコア16

test CHANGED
File without changes
test CHANGED
@@ -32,6 +32,34 @@
32
32
 
33
33
  ```php
34
34
 
35
+ Point.php
36
+
37
+ class Point extends AppModel {
38
+
39
+ public function sumByUserId($userId) {
40
+
41
+ $data = $this->find('all',
42
+
43
+ array(
44
+
45
+ 'conditions'=> array('user_id' => $userId),
46
+
47
+ 'fields' => array('sum(point) as sumPoints'),
48
+
49
+ )
50
+
51
+ );
52
+
53
+ return $data['0']['0']['sumPoints'];
54
+
55
+ }
56
+
57
+ }
58
+
59
+ ```
60
+
61
+ ```php
62
+
35
63
  PointsController
36
64
 
37
65
  他のコード省略
@@ -40,27 +68,13 @@
40
68
 
41
69
  parent::beforeFilter();
42
70
 
43
- $id = $this->Auth->user('id');
71
+ $userId = $this->Auth->user('id');
44
-
72
+
45
- $data = $this->Point->find('all',
73
+ $beforeP = $this->Point->sumByUserId($userId);
46
-
47
- array(
74
+
48
-
49
- 'conditions'=> array('user_id' => $id),
50
-
51
- 'fields' => array('sum(point) as sumPoints'),
52
-
53
- )
54
-
55
- );
56
-
57
- $beforeP = $data['0']['0']['sumPoints'];
58
-
59
- $this->set(compact('beforeP'));
75
+ $this->set(compact('beforeP'));
60
-
76
+
61
- }
77
+ }
62
-
63
-
64
78
 
65
79
 
66
80
 
@@ -68,9 +82,19 @@
68
82
 
69
83
  $this->set('videos', $this->Video->find('all'));
70
84
 
85
+ }
86
+
87
+
88
+
89
+ public function addPoint() {
90
+
71
- if ($this->request->is('ajax')){
91
+ if (!$this->request->is('ajax')) {
72
-
92
+
73
- $this->autoRender = false;
93
+ throw new BadRequestException();
94
+
95
+ }
96
+
97
+ $userId = $this->Auth->user('id');
74
98
 
75
99
  $data = array(
76
100
 
@@ -88,31 +112,23 @@
88
112
 
89
113
  $this->Point->save($data);
90
114
 
115
+
116
+
117
+ $afterP = $this->Point->sumByUserId($userId);
118
+
119
+ $this->viewClass = 'json';
120
+
121
+ $this->set(compact('afterP'));
122
+
123
+ $this->set('_serialize', array('afterP'));
124
+
125
+ //$this->set('_serialize',(res));のまま使ってしまい気付ずこの時間になってしまいました。
126
+
91
127
  }
92
128
 
93
- $id = $this->Auth->user('id');
94
-
95
- $data = $this->Point->find('all',
96
-
97
- array(
98
-
99
- 'conditions'=> array('user_id' => $id),
100
-
101
- 'fields' => array('sum(point) as sumPoints'),
102
-
103
- )
104
-
105
- );
106
-
107
- $afterP = $data['0']['0']['sumPoints'];
108
-
109
- $this->set(compact('afterP'));
110
-
111
- return;
112
-
113
- }
114
-
115
- ```
129
+ ```
130
+
131
+
116
132
 
117
133
  ```javascript
118
134
 
@@ -124,48 +140,42 @@
124
140
 
125
141
  $.ajax({
126
142
 
127
- type: "POST",
143
+ type: "POST",
128
-
144
+
129
- url: "",
145
+ url: "/aaa/bbb/addPoint",
130
-
146
+
131
- dataType: "text",// "json"にるとSyntaxError: Unexpected token < in JSON at position 1
147
+ dataType: "json", //やっとjsonで動きました!有難うございま
132
-
148
+
133
- data: {
149
+ data: {
134
-
150
+
135
- "point" : point
151
+ "point": point
136
152
 
137
153
  },
138
154
 
139
- success: function() {
155
+ success: function(res) {
140
-
156
+
141
- //モーダルを閉じる処理;
157
+ //モーダルを閉じる処理;
142
-
158
+
143
- //次の動画を呼び出す処理;
159
+ //次の動画を呼び出す処理;
160
+
144
-
161
+ $('#sumPoints').text(res.afterP);
162
+
163
+ },
164
+
165
+ error: function(XMLHttpRequest, textStatus, errorThrown) {
166
+
167
+ alert('Error : ' + errorThrown);
168
+
145
- }
169
+ }
146
-
147
- $('#sumPoint').text(afterP);
170
+
148
-
149
- },
171
+ });
150
-
151
- error: function(XMLHttpRequest, textStatus, errorThrown) {
172
+
152
-
153
- alert('Error : ' + errorThrown);
173
+ return false;
154
-
174
+
155
- }
175
+ }
156
-
157
- });
158
-
159
- console.log(afterP);
160
-
161
- return false;
162
-
163
- }
164
176
 
165
177
  });
166
178
 
167
-
168
-
169
179
  ```
170
180
 
171
181
  ```html
@@ -192,7 +202,7 @@
192
202
 
193
203
  $videos = json_safe_encode($videos);
194
204
 
195
- $afterP = json_safe_encode($afterP);
205
+ //$afterP = json_safe_encode($afterP);(削除)
196
206
 
197
207
  ?>
198
208
 
@@ -202,7 +212,7 @@
202
212
 
203
213
  var videos = JSON.parse('<?php echo $videos; ?>');
204
214
 
205
- var afterP = JSON.parse('<?php echo $afterP; ?>');
215
+ //var afterP = JSON.parse('<?php echo $afterP; ?>');(削除)
206
216
 
207
217
  </script>
208
218
 

11

exit;の削除

2016/06/03 14:06

投稿

milkif
milkif

スコア16

test CHANGED
File without changes
test CHANGED
@@ -88,8 +88,6 @@
88
88
 
89
89
  $this->Point->save($data);
90
90
 
91
- exit;
92
-
93
91
  }
94
92
 
95
93
  $id = $this->Auth->user('id');

10

発生している問題を追加

2016/06/02 13:53

投稿

milkif
milkif

スコア16

test CHANGED
File without changes
test CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  非同期通信にてモーダルを閉じる処理、次の動画を呼び出す処理及びDBにデータを保存するまでは実行できましたが、送信後の値(afterP)が送信前(beforeP)の値となってしまう。
14
14
 
15
-
15
+ 手動でブラウザのリロードを行うと送信後の値(afterP)を取得できるが、元の動画に戻ってしまう。
16
16
 
17
17
  ```
18
18
 

9

エラー内容の修正

2016/06/02 06:44

投稿

milkif
milkif

スコア16

test CHANGED
File without changes
test CHANGED
@@ -20,7 +20,7 @@
20
20
 
21
21
  dataType:"json"にすると送信時にアラートが表示
22
22
 
23
- SyntaxError: Unexpected token < in JSON at position 1が出てしまい次に進みません。
23
+ Error : SyntaxError: Unexpected end of JSON inputが出てしまい次に進みません。
24
24
 
25
25
  index.ctpのJSON.encodeと JSON.parseを外すと上記エラーは出ませんが、videosの値をjsファイルに渡す方法がわからず外せていません。
26
26
 

8

コードの改善

2016/06/02 01:59

投稿

milkif
milkif

スコア16

test CHANGED
File without changes
test CHANGED
@@ -86,17 +86,15 @@
86
86
 
87
87
  $this->Point->create();
88
88
 
89
- $pointSave = $this->Point->save($data);
89
+ $this->Point->save($data);
90
90
 
91
91
  exit;
92
92
 
93
93
  }
94
94
 
95
- if($pointSave !== false){
96
-
97
- $id = $this->Auth->user('id');
95
+ $id = $this->Auth->user('id');
98
-
96
+
99
- $data = $this->Point->find('all',
97
+ $data = $this->Point->find('all',
100
98
 
101
99
  array(
102
100
 
@@ -106,18 +104,14 @@
106
104
 
107
105
  )
108
106
 
109
- );
107
+ );
110
-
108
+
111
- $afterP = $data['0']['0']['sumPoints'];
109
+ $afterP = $data['0']['0']['sumPoints'];
112
-
110
+
113
- $this->set(compact('afterP'));
111
+ $this->set(compact('afterP'));
114
-
115
- }
116
112
 
117
113
  return;
118
114
 
119
- }
120
-
121
115
  }
122
116
 
123
117
  ```

7

index\.ctp function json_safe_encode\(\$data\)を追加

2016/06/02 01:56

投稿

milkif
milkif

スコア16

test CHANGED
File without changes
test CHANGED
@@ -188,9 +188,23 @@
188
188
 
189
189
 
190
190
 
191
+ <?php
192
+
193
+ function json_safe_encode($data){
194
+
195
+ return json_encode($data, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT);
196
+
197
+ }
198
+
199
+
200
+
191
- <?php $videos = json_encode($videos); ?>
201
+ $videos = json_safe_encode($videos);
192
-
202
+
193
- <?php $afterP = json_encode($afterP); ?>
203
+ $afterP = json_safe_encode($afterP);
204
+
205
+ ?>
206
+
207
+
194
208
 
195
209
  <script>
196
210
 

6

タグの追加

2016/06/02 01:29

投稿

milkif
milkif

スコア16

test CHANGED
File without changes
test CHANGED
@@ -152,7 +152,7 @@
152
152
 
153
153
  }
154
154
 
155
- document.getElementById('sumPoint').innerHTML = afterP;
155
+ $('#sumPoint').text(afterP);
156
156
 
157
157
  },
158
158
 

5

コード訂正

2016/06/02 00:35

投稿

milkif
milkif

スコア16

test CHANGED
File without changes
test CHANGED
@@ -92,7 +92,7 @@
92
92
 
93
93
  }
94
94
 
95
- if(pointSave !== false){
95
+ if($pointSave !== false){
96
96
 
97
97
  $id = $this->Auth->user('id');
98
98
 

4

コード修正

2016/06/02 00:27

投稿

milkif
milkif

スコア16

test CHANGED
File without changes
test CHANGED
@@ -10,19 +10,19 @@
10
10
 
11
11
 
12
12
 
13
- 非同期通信にてモーダルを閉じる処理、次の動画を呼び出す処理及びDBにデータを保存するまでは実行できましたが、送信後の値(afterP)が自動に取得できせん
13
+ 非同期通信にてモーダルを閉じる処理、次の動画を呼び出す処理及びDBにデータを保存するまでは実行できましたが、送信後の値(afterP)が送信前(beforeP)の値となってし
14
-
15
-
16
-
14
+
15
+
16
+
17
- ```
17
+ ```
18
-
19
- jsファイルのconsole.log(afterP)の値がnull
18
+
19
+
20
20
 
21
21
  dataType:"json"にすると送信時にアラートが表示
22
22
 
23
23
  SyntaxError: Unexpected token < in JSON at position 1が出てしまい次に進みません。
24
24
 
25
- index.ctpのJSON.encodeと JSON.parseを外すと上記エラーは出ませんが、videosの値をjsに渡す方法がわからず外せていません。
25
+ index.ctpのJSON.encodeと JSON.parseを外すと上記エラーは出ませんが、videosの値をjsファイルに渡す方法がわからず外せていません。
26
26
 
27
27
  ```
28
28
 
@@ -88,6 +88,10 @@
88
88
 
89
89
  $pointSave = $this->Point->save($data);
90
90
 
91
+ exit;
92
+
93
+ }
94
+
91
95
  if(pointSave !== false){
92
96
 
93
97
  $id = $this->Auth->user('id');
@@ -104,14 +108,14 @@
104
108
 
105
109
  );
106
110
 
107
- $afterP = $data['0']['0']['sumPoints'];
111
+ $afterP = $data['0']['0']['sumPoints'];
108
-
112
+
109
- $this->set(compact('afterP'));
113
+ $this->set(compact('afterP'));
114
+
115
+ }
110
116
 
111
117
  return;
112
118
 
113
- }
114
-
115
119
  }
116
120
 
117
121
  }

3

コード修正

2016/06/02 00:19

投稿

milkif
milkif

スコア16

test CHANGED
File without changes
test CHANGED
@@ -178,7 +178,7 @@
178
178
 
179
179
  他のコード省略
180
180
 
181
- <p>送信前:<?php print_r($beforeP) ; ?> pt</p>
181
+ <p>送信前:<?php echo $beforeP; ?> pt</p>
182
182
 
183
183
  <p>送信後:<span id="sumPoint"></span> pt</p>
184
184
 

2

表題の修正

2016/06/01 23:02

投稿

milkif
milkif

スコア16

test CHANGED
@@ -1 +1 @@
1
- cakephp2系 非同期通信にて得た値をリアルタイムに表示させたい。
1
+ cakephp2系 非同期通信にてた値をリアルタイムに表示させたい。
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- 非同期通信にて得た値をDBに登録し、送信後の値をリアルタイムに表示させたい。
5
+ 非同期通信にてた値をDBに登録し、送信後の値をリアルタイムに表示させたい。
6
6
 
7
7
 
8
8
 

1

url: "index",をurl: "",に修正

2016/06/01 22:44

投稿

milkif
milkif

スコア16

test CHANGED
File without changes
test CHANGED
@@ -130,7 +130,7 @@
130
130
 
131
131
  type: "POST",
132
132
 
133
- url: "index",
133
+ url: "",
134
134
 
135
135
  dataType: "text",// "json"にするとSyntaxError: Unexpected token < in JSON at position 1
136
136