回答編集履歴

2

さらにサンプルを追記

2016/09/01 15:56

投稿

KatsumiTanaka
KatsumiTanaka

スコア924

test CHANGED
@@ -18,52 +18,110 @@
18
18
 
19
19
 
20
20
 
21
- 追記:
21
+ **追記:(再編集しています)**
22
22
 
23
- Ajaxに対してjson結果を返す場合のサンプルを貼っておき
23
+ CakePHP3だいぶ動きが変わってした。申し訳ありません。
24
24
 
25
- ざっくりですが、処理内容はAjax経由で郵便番号をもらい、郵便番号を検索するシステム共通のAPIを呼んで住所文字列を取得し、それをjsonにエンコードして戻しています。
26
-
27
- また、Javascriptはevalで連想配列変換て、返却されデータを処理してします
25
+ 自分の環境動作確認した処理を記述します
28
26
 
29
27
 
30
28
 
31
29
  ```CakePHP
32
30
 
33
- function getAddress(){
34
31
 
35
- $this->autoRender = false;
36
32
 
37
- $rtnData = array('p0rtrn' => 'NG');
33
+ //routes.php
38
34
 
39
- try {
40
-
41
- $zip1 = GetParams::getParamForm('zip_code1', $this->params);
35
+ Router::extensions(['json', 'xml']); // これを追加
42
-
43
- $zip2 = GetParams::getParamForm('zip_code2', $this->params);
44
-
45
- if (!(empty($zip1) || empty($zip2))) {
46
-
47
- //---------------------------------------------------------------
48
-
49
- // API呼び出し:郵便番号情報(ApiZipMst:ADDRESS)
50
-
51
- //---------------------------------------------------------------
52
-
53
- $rtnData = $this->ApiZipMst->getZipMstJusho($this->_gmninfTouroku, $zip1, $zip2);
54
36
 
55
37
 
56
38
 
57
- return json_encode($rtnData);
39
+ // Contoroller
58
40
 
59
- }
41
+ public function initialize() { // initializeメソッドがなければ追加
60
42
 
61
- } catch (Exception $e) {
43
+ parent::initialize();
62
44
 
63
- $this->log("Exception発生 郵便番号照会:".$e->getMessage(), LOG_ERR, $this->_gmninfTouroku['id'], $this->sId, __FILE__, __LINE__);
45
+ $this->loadComponent('RequestHandler'); // これを追加
64
46
 
65
- }
47
+ }
48
+
49
+
50
+
51
+ /**
52
+
53
+ * Ajaxの処理メソッド
54
+
55
+ */
56
+
57
+ public function AjaxTest() {
58
+
59
+ $returnData = array('test'=>'test');
60
+
61
+
62
+
63
+ $this->set('data',$returnData);
64
+
65
+ $this->set('_serialize', ['data']);
66
+
67
+ }
68
+
69
+
70
+
71
+ // JavaScript
72
+
73
+ $(function() {
74
+
75
+ $('#TestAjax').on('click',function() {
76
+
77
+ jQuery.ajax({
78
+
79
+ type: "POST",
80
+
81
+ async:false,
82
+
83
+ url: '/cakephp3/test/AjaxTest.json',
84
+
85
+ dataType: 'text',
86
+
87
+ complete: function(XMLHttpRequest){
88
+
89
+ set_data(XMLHttpRequest.responseText);
90
+
91
+ },
92
+
93
+ error: function(XMLHttpRequest, textStatus, errorThrown) {
94
+
95
+ alert("Ajax通信エラー発生:"+errorThrown);
96
+
97
+ }
98
+
99
+ });
100
+
101
+ });
102
+
103
+ });
104
+
105
+
106
+
107
+ function set_data(data) {
108
+
109
+ var res = eval('(' + data + ')');
110
+
111
+
112
+
113
+ $('#messageText').text(res.data.test);
114
+
115
+
66
116
 
67
117
  }
68
118
 
69
119
  ```
120
+
121
+
122
+
123
+ Javascript側で受け取ったデータは、
124
+
125
+ {'data':{'test':'test'}}
126
+
127
+ という形式になっているので、evalで処理した後はres.data.testという形でデータを取り出します

1

ソースコードを追記

2016/09/01 15:56

投稿

KatsumiTanaka
KatsumiTanaka

スコア924

test CHANGED
@@ -15,3 +15,55 @@
15
15
 
16
16
 
17
17
  CakePHPは、MVCというデザインパターンで構成されたフレームワークですので、一度MVCというデザインパターンを理解してみてはいかがでしょうか?
18
+
19
+
20
+
21
+ 追記:
22
+
23
+ Ajaxに対してjsonで結果を返す場合のサンプルを貼っておきます
24
+
25
+ ざっくりですが、処理内容はAjax経由で郵便番号をもらい、郵便番号を検索するシステム共通のAPIを呼んで住所文字列を取得し、それをjsonにエンコードして戻しています。
26
+
27
+ また、Javascriptではevalで連想配列を変換して、返却されたデータを処理してします
28
+
29
+
30
+
31
+ ```CakePHP
32
+
33
+ function getAddress(){
34
+
35
+ $this->autoRender = false;
36
+
37
+ $rtnData = array('p0rtrn' => 'NG');
38
+
39
+ try {
40
+
41
+ $zip1 = GetParams::getParamForm('zip_code1', $this->params);
42
+
43
+ $zip2 = GetParams::getParamForm('zip_code2', $this->params);
44
+
45
+ if (!(empty($zip1) || empty($zip2))) {
46
+
47
+ //---------------------------------------------------------------
48
+
49
+ // API呼び出し:郵便番号情報(ApiZipMst:ADDRESS)
50
+
51
+ //---------------------------------------------------------------
52
+
53
+ $rtnData = $this->ApiZipMst->getZipMstJusho($this->_gmninfTouroku, $zip1, $zip2);
54
+
55
+
56
+
57
+ return json_encode($rtnData);
58
+
59
+ }
60
+
61
+ } catch (Exception $e) {
62
+
63
+ $this->log("Exception発生 郵便番号照会:".$e->getMessage(), LOG_ERR, $this->_gmninfTouroku['id'], $this->sId, __FILE__, __LINE__);
64
+
65
+ }
66
+
67
+ }
68
+
69
+ ```