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

質問編集履歴

12

解決したコードに修正

2016/06/03 14:06

投稿

milkif
milkif

スコア16

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
- $id = $this->Auth->user('id');
36
+ $userId = $this->Auth->user('id');
23
- $data = $this->Point->find('all',
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
- $this->set(compact('beforeP'));
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
- if ($this->request->is('ajax')){
46
+ if (!$this->request->is('ajax')) {
37
- $this->autoRender = false;
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
- type: "POST",
72
+ type: "POST",
65
- url: "",
73
+ url: "/aaa/bbb/addPoint",
66
- dataType: "text",// "json"にるとSyntaxError: Unexpected token < in JSON at position 1
74
+ dataType: "json", //やっとjsonで動きました!有難うございま
67
- data: {
75
+ data: {
68
- "point" : point
76
+ "point": point
69
77
  },
70
- success: function() {
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
- alert('Error : ' + errorThrown);
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;の削除

2016/06/03 14:06

投稿

milkif
milkif

スコア16

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

発生している問題を追加

2016/06/02 13:53

投稿

milkif
milkif

スコア16

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

エラー内容の修正

2016/06/02 06:44

投稿

milkif
milkif

スコア16

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

8

コードの改善

2016/06/02 01:59

投稿

milkif
milkif

スコア16

title CHANGED
File without changes
body CHANGED
@@ -42,22 +42,19 @@
42
42
  )
43
43
  );
44
44
  $this->Point->create();
45
- $pointSave = $this->Point->save($data);
45
+ $this->Point->save($data);
46
46
  exit;
47
47
  }
48
- if($pointSave !== false){
49
- $id = $this->Auth->user('id');
48
+ $id = $this->Auth->user('id');
50
- $data = $this->Point->find('all',
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
- $afterP = $data['0']['0']['sumPoints'];
55
+ $afterP = $data['0']['0']['sumPoints'];
57
- $this->set(compact('afterP'));
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\)を追加

2016/06/02 01:56

投稿

milkif
milkif

スコア16

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
- <?php $videos = json_encode($videos); ?>
101
+ $videos = json_safe_encode($videos);
97
- <?php $afterP = json_encode($afterP); ?>
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

タグの追加

2016/06/02 01:29

投稿

milkif
milkif

スコア16

title CHANGED
File without changes
body CHANGED
@@ -75,7 +75,7 @@
75
75
  //モーダルを閉じる処理;
76
76
  //次の動画を呼び出す処理;
77
77
  }
78
- document.getElementById('sumPoint').innerHTML = afterP;
78
+ $('#sumPoint').text(afterP);
79
79
  },
80
80
  error: function(XMLHttpRequest, textStatus, errorThrown) {
81
81
  alert('Error : ' + errorThrown);

5

コード訂正

2016/06/02 00:35

投稿

milkif
milkif

スコア16

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

コード修正

2016/06/02 00:27

投稿

milkif
milkif

スコア16

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
- jsファイルのconsole.log(afterP)の値がnull
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
- $afterP = $data['0']['0']['sumPoints'];
56
+ $afterP = $data['0']['0']['sumPoints'];
55
- $this->set(compact('afterP'));
57
+ $this->set(compact('afterP'));
58
+ }
56
59
  return;
57
- }
58
60
  }
59
61
  }
60
62
  ```

3

コード修正

2016/06/02 00:19

投稿

milkif
milkif

スコア16

title CHANGED
File without changes
body CHANGED
@@ -88,7 +88,7 @@
88
88
  ```html
89
89
  index.ctp
90
90
  他のコード省略
91
- <p>送信前:<?php print_r($beforeP) ; ?> pt</p>
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

表題の修正

2016/06/01 23:02

投稿

milkif
milkif

スコア16

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: "",に修正

2016/06/01 22:44

投稿

milkif
milkif

スコア16

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: "index",
67
+ url: "",
68
68
  dataType: "text",// "json"にするとSyntaxError: Unexpected token < in JSON at position 1
69
69
  data: {
70
70
  "point" : point