質問編集履歴

3

正しいコードに変更。旧コードを下に追加。$.postの詳細を記入

2019/05/28 00:19

投稿

Beronika
Beronika

スコア18

test CHANGED
File without changes
test CHANGED
@@ -14,6 +14,262 @@
14
14
 
15
15
  $("#registration").on('click',function(){
16
16
 
17
+ $.post('_Ajax.php',{
18
+
19
+ dataType:'json',
20
+
21
+ name:$('#name').val(),
22
+
23
+ url:$("#url").val(),
24
+
25
+ mode:'reg'
26
+
27
+ }).done(function(res){
28
+
29
+ console.log("こんにちは!");
30
+
31
+ }).fail(function(XMLHttpRequest, textStatus, errorThrown){
32
+
33
+ console.log('失敗');
34
+
35
+ console.log("XMLHttpRequest : " + XMLHttpRequest.status);
36
+
37
+ console.log("textStatus : " + textStatus);
38
+
39
+ console.log("errorThrown : " + errorThrown.message);
40
+
41
+ });
42
+
43
+ });
44
+
45
+ ```
46
+
47
+
48
+
49
+ ```PHP
50
+
51
+ //jsから渡ってきた値を処理するコード。今回はPHP・Aとする
52
+
53
+ <?php
54
+
55
+ require_once('management.php');
56
+
57
+
58
+
59
+ $ajax_processing = new DB();
60
+
61
+
62
+
63
+ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
64
+
65
+ try {
66
+
67
+ $res = $ajax_processing->post();
68
+
69
+ header('Content-Type: application/json');
70
+
71
+ echo json_encode($res);
72
+
73
+ exit;
74
+
75
+ } catch (Exception $e) {
76
+
77
+ header($_SERVER['SERVER_PROTOCOL'] . ' 500 Internal Server Error', true, 500);
78
+
79
+ echo $e->getMessage();
80
+
81
+ exit;
82
+
83
+ }
84
+
85
+ }
86
+
87
+ ```
88
+
89
+
90
+
91
+ ```PHP
92
+
93
+ //classについて記入しているコード。今回はPHP・Bとする
94
+
95
+ //一応POSTメソッドを記入。データベースの読み込み等は省略します。
96
+
97
+ <?php
98
+
99
+ class DB{
100
+
101
+    public function post(){
102
+
103
+ switch ($_POST['mode']){
104
+
105
+ case 'reg';
106
+
107
+ return $this->registration();
108
+
109
+ }
110
+
111
+ }
112
+
113
+
114
+
115
+
116
+
117
+ public function registration(){
118
+
119
+ $sql = "insert into deck_data(name,leader,type,url) values (:name,:leader,:type,:url)";
120
+
121
+ $stmt = $this->_db->prepare($sql);
122
+
123
+ $stmt->execute(array(
124
+
125
+ ":name"=>$_POST['name'],
126
+
127
+ ":url"=>$_POST['url']
128
+
129
+ ));
130
+
131
+
132
+
133
+ return[
134
+
135
+ 'id' => $this->_db->lastInsertId()
136
+
137
+ ];
138
+
139
+ }
140
+
141
+ ```
142
+
143
+
144
+
145
+ ### 自分で行ったこと
146
+
147
+
148
+
149
+ ここの部分では、どのような流れで上記のコードになったのかを説明していきます。
150
+
151
+
152
+
153
+ 1、原因解明
154
+
155
+ データベースにデータは入力されているので、
156
+
157
+ ・   $res = $ajax_processing->post();
158
+
159
+ の部分まではうまく行っていると思った。その後の部分に問題があると思い、done(res)以降を「console.log("こんにちは!");」に変更。結果、「こんにちは」は返ってこなかった。fail処理を用意してみたら、failに書いた処理の方が反映された。
160
+
161
+ →やはりjson形式でうまく返せていないことを確認した。json書き方自体に問題があると分析した。
162
+
163
+
164
+
165
+ 2、値を代入してみる
166
+
167
+ そもそもjson形式にする値がないのではないかと仮定した。なので、以下のコードを「$res = $ajax_processing->post();」の上に入れてみた。
168
+
169
+ $data = array(
170
+
171
+ "name" => $_GET["name"],
172
+
173
+ "url" => $_GET['url']
174
+
175
+ );
176
+
177
+ 結果はターミナルで立てたビルドインサーバーの方に「PHP Notice: Undefined index: name in (データの場所)」というエラーメッセージが出てきた。
178
+
179
+ →どうしてnameが定義されていないのか理解できなくなり、余計混乱してくる。
180
+
181
+ ※これは「_GET」を「_POST」に変更するだけで大丈夫でした。
182
+
183
+
184
+
185
+ 3、エラーの検証(未解決)
186
+
187
+ そもそもエラーが何かを知りたくなったので、エラーを検出するコードをネットから拾って、入力。結果は下になった
188
+
189
+ ・   textStatus : parsererror
190
+
191
+ ・   errorThrown : Unexpected token < in JSON at position 2
192
+
193
+ どうやらjsonの中にHTMLの形で入ってしまっている?JSONの値の中に「<」というものがあって、それが混乱を招いているということがわかった。
194
+
195
+ →しかし、json形式で返しているし、どのようにすると「<」取り除かれるのかわからない。どこを改善すればいいのかがわからなくてお手上げ状態。
196
+
197
+
198
+
199
+ 4、あるサイトを参考(未解決)
200
+
201
+ 「[ajaxではまった話](https://qiita.com/qwq00/items/b95edb10156a64fa347f)」こちらのサイトを参考に
202
+
203
+ echo $res->request->is(['ajax']); …①
204
+
205
+ を、$this=$ajax_processingの部分に入れてみた。結果、「こんにちは」とは表示された。しかし、「console.log('こんにちは')」の下に「console.log(data)」を入れてみると、「Using $this when not in object context」というエラーが出てしまう。①が結局何かもわからない
206
+
207
+
208
+
209
+ ### 主にわからないこと
210
+
211
+ ・そもそもjsで最初に定義した値(「name」や「mode」など)はPHP・Aではどのように使われて、どのようにjson形式で返せばいいのかが理解できない(未解決)
212
+
213
+ ・$resとは何をしているものなのか。そしてjson形式で返ってきた後のdoneで使われているresは同じものなのか、それとも違うものなのか?(解決!今は考えなくて良い)
214
+
215
+ ・json形式から返ってきた際のfunctionの引数が人によって「data」だったりするが、ここに入れる引数はどのようなものなのか?(上に同じ)
216
+
217
+ ・現状どのような問題があってdoneに行けないのか
218
+
219
+
220
+
221
+
222
+
223
+ その他必要な情報があれば随時追記していきます。ajaxの仕組みで理解できていない部分がいくつかあるため、今回のようなミスをしてしまったかもしれないです。もし、ここが理解できていないという部分がありましたら教えていただける人も募集いたします。
224
+
225
+ お時間を取らせてしまうようですが、よろしくお願いいたします。
226
+
227
+
228
+
229
+
230
+
231
+ ※$.postの部分に入れるdataについて
232
+
233
+ 現在、ajax処理を行うために$.postを用いている。そこに「name」と「url」というものがそれぞれあるが、これらをdataに入れた方がいいことは理解している。
234
+
235
+ しかし、dataにしてしまうとデータベースに反映されなくなってしまう。
236
+
237
+ なので、現状はこのような形にしているが、もしdataに入れる方法がわかるのであれば教えて欲しいです。
238
+
239
+ コード
240
+
241
+ $.post('_Ajax.php,{
242
+
243
+ data:{
244
+
245
+ name:name,
246
+
247
+ url:url
248
+
249
+ },
250
+
251
+ mode:"reg",
252
+
253
+ })~
254
+
255
+ 結果
256
+
257
+ undifined index:name (場所(PHP・Bの":name"=>$_POST['name'],))
258
+
259
+ undifined index:name (場所(PHP・Bの))
260
+
261
+
262
+
263
+
264
+
265
+
266
+
267
+ ### 旧ソースコード(こちらは参考にしなくても結構です。)
268
+
269
+ ```js
270
+
271
+ $("#registration").on('click',function(){
272
+
17
273
  var name = $('#name').val();
18
274
 
19
275
  var url = $("#url").val();
@@ -149,97 +405,3 @@
149
405
  }
150
406
 
151
407
  ```
152
-
153
-
154
-
155
- ### 自分で行ったこと
156
-
157
-
158
-
159
- ここの部分では、どのような流れで上記のコードになったのかを説明していきます。
160
-
161
-
162
-
163
- 1、原因解明
164
-
165
- データベースにデータは入力されているので、
166
-
167
- ・   $res = $ajax_processing->post();
168
-
169
- の部分まではうまく行っていると思った。その後の部分に問題があると思い、done(res)以降を「console.log("こんにちは!");」に変更。結果、「こんにちは」は返ってこなかった。fail処理を用意してみたら、failに書いた処理の方が反映された。
170
-
171
- →やはりjson形式でうまく返せていないことを確認した。json書き方自体に問題があると分析した。
172
-
173
-
174
-
175
- 2、値を代入してみる
176
-
177
- そもそもjson形式にする値がないのではないかと仮定した。なので、以下のコードを「$res = $ajax_processing->post();」の上に入れてみた。
178
-
179
- $data = array(
180
-
181
- "name" => $_GET["name"],
182
-
183
- "url" => $_GET['url']
184
-
185
- );
186
-
187
- 結果はターミナルで立てたビルドインサーバーの方に「PHP Notice: Undefined index: name in (データの場所)」というエラーメッセージが出てきた。
188
-
189
- →どうしてnameが定義されていないのか理解できなくなり、余計混乱してくる。
190
-
191
- ※これは「_GET」を「_POST」に変更するだけで大丈夫でした。
192
-
193
-
194
-
195
- 3、エラーの検証(未解決)
196
-
197
- そもそもエラーが何かを知りたくなったので、エラーを検出するコードをネットから拾って、入力。結果は下になった
198
-
199
- ・   textStatus : parsererror
200
-
201
- ・   errorThrown : Unexpected token < in JSON at position 2
202
-
203
- どうやらjsonの中にHTMLの形で入ってしまっている?JSONの値の中に「<」というものがあって、それが混乱を招いているということがわかった。
204
-
205
- →しかし、json形式で返しているし、どのようにすると「<」取り除かれるのかわからない。どこを改善すればいいのかがわからなくてお手上げ状態。
206
-
207
-
208
-
209
- 4、あるサイトを参考(未解決)
210
-
211
- 「[ajaxではまった話](https://qiita.com/qwq00/items/b95edb10156a64fa347f)」こちらのサイトを参考に
212
-
213
- echo $res->request->is(['ajax']); …①
214
-
215
- を、$this=$ajax_processingの部分に入れてみた。結果、「こんにちは」とは表示された。しかし、「console.log('こんにちは')」の下に「console.log(data)」を入れてみると、「Using $this when not in object context」というエラーが出てしまう。①が結局何かもわからない
216
-
217
-
218
-
219
- ### 主にわからないこと
220
-
221
- ・そもそもjsで最初に定義した値(「name」や「mode」など)はPHP・Aではどのように使われて、どのようにjson形式で返せばいいのかが理解できない(未解決)
222
-
223
- ・$resとは何をしているものなのか。そしてjson形式で返ってきた後のdoneで使われているresは同じものなのか、それとも違うものなのか?(解決!今は考えなくて良い)
224
-
225
- ・json形式から返ってきた際のfunctionの引数が人によって「data」だったりするが、ここに入れる引数はどのようなものなのか?(上に同じ)
226
-
227
- ・現状どのような問題があってdoneに行けないのか
228
-
229
-
230
-
231
-
232
-
233
- その他必要な情報があれば随時追記していきます。ajaxの仕組みで理解できていない部分がいくつかあるため、今回のようなミスをしてしまったかもしれないです。もし、ここが理解できていないという部分がありましたら教えていただける人も募集いたします。
234
-
235
- お時間を取らせてしまうようですが、よろしくお願いいたします。
236
-
237
-
238
-
239
- ※POSTの部分に入れるdataについて
240
-
241
- 現在、「name」と「url」というものがそれぞれあるが、これらをdataに入れた方がいいことは理解している。
242
-
243
- しかし、dataにしてしまうとデータベースに反映されなくなってしまう。
244
-
245
- なので、現状はこのような形にしているが、もしdataに入れる方法がわかるのであれば教えて欲しいです。

2

進展を書き込み、新しい問題点を書き込み。理解しやすいように改良もした。

2019/05/28 00:18

投稿

Beronika
Beronika

スコア18

test CHANGED
File without changes
test CHANGED
@@ -1,8 +1,10 @@
1
+ 現在、ajaxを用いて、入力されたデータをデータベースに保存して、別の部分に反映させるというプログラミングを書いております。
2
+
1
- 現在、Ajsxを用いて、入力されたデータをデータベースに保存して、別の部分に反映させるというプログラミングを書いております。プログラミングを書き進めて、実際にデータベースにデータを格納することはできました。しかし、その後、json形式にしてデータを反映させる処理ができません。お時間を取らせてしまい申し訳ありませんが、ここさえ解決すると一気に進めそうなので協力の方をお願いいたします。
3
+ プログラミングを書き進めて、実際にデータベースにデータを格納することはできました。しかし、その後、json形式にしてデータを反映させる処理ができません。お時間を取らせてしまい申し訳ありませんが、ここさえ解決すると一気に進めそうなので協力の方をお願いいたします。
2
-
3
-
4
-
4
+
5
+
6
+
5
- ソースコードは下です。わかりやすいように簡易版でまとめてみます。
7
+ ソースコードは下です。わかりやすいように簡易版でまとめます。
6
8
 
7
9
 
8
10
 
@@ -68,15 +70,9 @@
68
70
 
69
71
  try {
70
72
 
71
- // $data = array(
73
+
72
-
73
- // "name" => $_GET["name"],
74
+
74
-
75
- // "url" => $_GET['url']
76
-
77
- // );
78
-
79
- $res = $ajax_processing->post();//ここの部分は今回はカットいたします。
75
+ $res = $ajax_processing->post();//PHP・Bに飛ぶようにプログラミング
80
76
 
81
77
  // jsonであることを知らせている
82
78
 
@@ -166,57 +162,13 @@
166
162
 
167
163
  1、原因解明
168
164
 
169
- まず、データベースに反映されているということは、別のPHPで行っているデータベース代のプログラミングはうまく処理されている。そこから
165
+ データベースにデータされているので
170
166
 
171
167
  ・   $res = $ajax_processing->post();
172
168
 
173
- の部分まではうまく行っていることを仮定した。なので、そのあとの部分に問題があるとした。
174
-
175
-
176
-
177
- そもそもは以下のようなコードを書いていた。
178
-
179
- ```JavaScript
180
-
181
- $("#registration").on('click',function(){
182
-
183
- var name = $('#name').val();
184
-
185
- var url = $("#url").val();
186
-
187
- $.post('_Ajax.php',{
188
-
189
- dataType:'text',
190
-
191
- name:name,
192
-
193
- url:url,
194
-
195
- mode:'reg'
196
-
197
- },function(res){
198
-
199
- var $div = $('decklist_template').clone();
200
-
201
- $div
202
-
203
- .attr('id','deck_'+res.id)
204
-
205
- .find('.deckName').text(name)
206
-
207
- $("#deck_list").append($div);
208
-
209
- $('#name').val('');
210
-
211
- $('#url').val('');
212
-
213
- })
214
-
215
- ```
216
-
217
- しかし検証結果からそもそも「function(res)以降の処理行っていないのではないかと推測し、var $div = ~」の部分を「console.log("こんにちは!");」のみに変更。結果、返ってこなかった。なので、JavaScriptにjson形式でうまく返すことができていないのではないかと推測、fail処理を用意した。
169
+ の部分まではうまく行っていると思った。その後の部分に問題があると思いdone(res)以降を「console.log("こんにちは!");」に変更。結果、「こんにちは」は返ってこなかった。fail処理を用意してみら、failに書いた処理の方が反映された
218
-
170
+
219
- →やはりjson形式でうまく返せていないことを把握。json書き方自体に問題があると分析した。
171
+ →やはりjson形式でうまく返せていないことを確認した。json書き方自体に問題があると分析した。
220
172
 
221
173
 
222
174
 
@@ -224,8 +176,6 @@
224
176
 
225
177
  そもそもjson形式にする値がないのではないかと仮定した。なので、以下のコードを「$res = $ajax_processing->post();」の上に入れてみた。
226
178
 
227
- ```PHP
228
-
229
179
  $data = array(
230
180
 
231
181
  "name" => $_GET["name"],
@@ -234,48 +184,62 @@
234
184
 
235
185
  );
236
186
 
237
- ```
238
-
239
- 結果はターミナルで立てたビルドインサーバーの方に「PHP Notice: Undefined index: name in /home/vagrant/ライバルズ旅/_Ajax.php on line 14」というエラーメッセージが出てきた。
187
+ 結果はターミナルで立てたビルドインサーバーの方に「PHP Notice: Undefined index: name in (データ場所)」というエラーメッセージが出てきた。
240
188
 
241
189
  →どうしてnameが定義されていないのか理解できなくなり、余計混乱してくる。
242
190
 
243
-
191
+ ※これは「_GET」を「_POST」に変更するだけで大丈夫でした。
244
-
192
+
193
+
194
+
245
- 3、エラーの検証
195
+ 3、エラーの検証(未解決)
246
-
196
+
247
- そもそもエラーが何かを知りたくなったので、エラーを検出するコードをネットから探すことにしたその結果、failメソッドの中ているコード。
197
+ そもそもエラーが何かを知りたくなったので、エラーを検出するコードをネットから拾って、入力。結果は下
248
-
249
- 一度値を代入して、結果を返してもらうと以下のエラー文が出た
250
198
 
251
199
  ・   textStatus : parsererror
252
200
 
253
201
  ・   errorThrown : Unexpected token < in JSON at position 2
254
202
 
255
- ネットで調べてみると、どうやらjsonの中にHTMLの形で入ってしまっている?JSONの値の中に「<」というものがあって、それが混乱を招いているということがわかった。
203
+ どうやらjsonの中にHTMLの形で入ってしまっている?JSONの値の中に「<」というものがあって、それが混乱を招いているということがわかった。
256
204
 
257
205
  →しかし、json形式で返しているし、どのようにすると「<」取り除かれるのかわからない。どこを改善すればいいのかがわからなくてお手上げ状態。
258
206
 
259
207
 
260
208
 
261
- 以上の仮定で上記プログラムになった。
209
+ 4、あるサイトを参考(未解決)
210
+
211
+ 「[ajaxではまった話](https://qiita.com/qwq00/items/b95edb10156a64fa347f)」こちらのサイトを参考に
212
+
213
+ echo $res->request->is(['ajax']); …①
214
+
215
+ を、$this=$ajax_processingの部分に入れてみた。結果、「こんにちは」とは表示された。しかし、「console.log('こんにちは')」の下に「console.log(data)」を入れてみると、「Using $this when not in object context」というエラーが出てしまう。①が結局何かもわからない
262
216
 
263
217
 
264
218
 
265
219
  ### 主にわからないこと
266
220
 
267
- ・そもそもjsで最初に定義した値(「name」や「mode」など)はPHP・Aではどのように使われて、どのようにjson形式で返せばいいのかが理解できない
221
+ ・そもそもjsで最初に定義した値(「name」や「mode」など)はPHP・Aではどのように使われて、どのようにjson形式で返せばいいのかが理解できない(未解決)
268
-
222
+
269
- ・$resとは何をしているものなのか。そしてjson形式で返ってきた後のdoneで使われているresは同じものなのか、それとも違うものなのか?
223
+ ・$resとは何をしているものなのか。そしてjson形式で返ってきた後のdoneで使われているresは同じものなのか、それとも違うものなのか?(解決!今は考えなくて良い)
270
-
224
+
271
- ・json形式から返ってきた際のfunctionの引数が人によって「data」だったりするが、ここに入れる引数はどのようなものなのか?
225
+ ・json形式から返ってきた際のfunctionの引数が人によって「data」だったりするが、ここに入れる引数はどのようなものなのか?(上に同じ)
272
-
226
+
273
- ・doneの部分に行くためにはどのようにすればのか
227
+ 現状どのような問題があってdoneに行けないのか
274
-
275
-
276
-
277
-
278
-
228
+
229
+
230
+
231
+
232
+
279
- その他必要な情報があれば随時追記していきます。ajaxの仕組みで理解できていない部分がいくつかあるため、今回のようなミスをしてしまったかもしれないです。もし、ここが理解できていないという部分がありましたら教えてくれと嬉いです。
233
+ その他必要な情報があれば随時追記していきます。ajaxの仕組みで理解できていない部分がいくつかあるため、今回のようなミスをしてしまったかもしれないです。もし、ここが理解できていないという部分がありましたら教えていただけ人も募集いたす。
280
234
 
281
235
  お時間を取らせてしまうようですが、よろしくお願いいたします。
236
+
237
+
238
+
239
+ ※POSTの部分に入れるdataについて
240
+
241
+ 現在、「name」と「url」というものがそれぞれあるが、これらをdataに入れた方がいいことは理解している。
242
+
243
+ しかし、dataにしてしまうとデータベースに反映されなくなってしまう。
244
+
245
+ なので、現状はこのような形にしているが、もしdataに入れる方法がわかるのであれば教えて欲しいです。

1

より簡潔に、わかりやすいように修正。

2019/05/27 11:29

投稿

Beronika
Beronika

スコア18

test CHANGED
File without changes
test CHANGED
@@ -18,220 +18,214 @@
18
18
 
19
19
  $.post('_Ajax.php',{
20
20
 
21
+ dataType:'json',
22
+
23
+ name:name,
24
+
25
+ url:url,
26
+
27
+ mode:'reg'
28
+
29
+ }).done(function(res){
30
+
31
+ console.log("こんにちは!");
32
+
33
+ }).fail(function(XMLHttpRequest, textStatus, errorThrown){
34
+
35
+ console.log('失敗');
36
+
37
+ console.log("XMLHttpRequest : " + XMLHttpRequest.status);
38
+
39
+ console.log("textStatus : " + textStatus);
40
+
41
+ console.log("errorThrown : " + errorThrown.message);
42
+
43
+ });
44
+
45
+ });
46
+
47
+ ```
48
+
49
+
50
+
51
+ ```PHP
52
+
53
+ //jsから渡ってきた値を処理するコード。今回はPHP・Aとする
54
+
55
+ <?php
56
+
57
+ require_once('management.php');
58
+
59
+
60
+
61
+ $ajax_processing = new DB();
62
+
63
+
64
+
65
+ //今回はmanagementクラスのインスタンスを作って、post()というメソッドを呼び出す処理を書いている
66
+
67
+ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
68
+
69
+ try {
70
+
71
+ // $data = array(
72
+
73
+ // "name" => $_GET["name"],
74
+
75
+ // "url" => $_GET['url']
76
+
77
+ // );
78
+
79
+ $res = $ajax_processing->post();//ここの部分は今回はカットいたします。
80
+
81
+ // jsonであることを知らせている
82
+
83
+ header('Content-Type: application/json');
84
+
85
+ echo json_encode($res);
86
+
87
+ exit;
88
+
89
+ } catch (Exception $e) {
90
+
91
+ header($_SERVER['SERVER_PROTOCOL'] . ' 500 Internal Server Error', true, 500);
92
+
93
+ echo $e->getMessage();
94
+
95
+ exit;
96
+
97
+ }
98
+
99
+ }
100
+
101
+ ```
102
+
103
+
104
+
105
+ ```PHP
106
+
107
+ //classについて記入しているコード。今回はPHP・Bとする
108
+
109
+ //一応POSTメソッドを記入。データベースの読み込み等は省略します。
110
+
111
+ <?php
112
+
113
+ class DB{
114
+
115
+    public function post(){
116
+
117
+ switch ($_POST['mode']){
118
+
119
+ case 'reg';
120
+
121
+ return $this->registration();
122
+
123
+ }
124
+
125
+ }
126
+
127
+
128
+
129
+
130
+
131
+ public function registration(){
132
+
133
+ $sql = "insert into deck_data(name,leader,type,url) values (:name,:leader,:type,:url)";
134
+
135
+ $stmt = $this->_db->prepare($sql);
136
+
137
+ $stmt->execute(array(
138
+
139
+ ":name"=>$_POST['name'],
140
+
141
+ ":url"=>$_POST['url']
142
+
143
+ ));
144
+
145
+
146
+
147
+ return[
148
+
149
+ 'id' => $this->_db->lastInsertId()
150
+
151
+ ];
152
+
153
+ }
154
+
155
+ ```
156
+
157
+
158
+
159
+ ### 自分で行ったこと
160
+
161
+
162
+
163
+ ここの部分では、どのような流れで上記のコードになったのかを説明していきます。
164
+
165
+
166
+
167
+ 1、原因解明
168
+
169
+ まず、データベースに反映されているということは、別のPHPで行っているデータベース代入のプログラミングはうまく処理されている。そこから、
170
+
171
+ ・   $res = $ajax_processing->post();
172
+
173
+ の部分まではうまく行っていることを仮定した。なので、そのあとの部分に問題があるとした。
174
+
175
+
176
+
177
+ そもそもは以下のようなコードを書いていた。
178
+
179
+ ```JavaScript
180
+
181
+ $("#registration").on('click',function(){
182
+
183
+ var name = $('#name').val();
184
+
185
+ var url = $("#url").val();
186
+
187
+ $.post('_Ajax.php',{
188
+
21
189
  dataType:'text',
22
190
 
23
191
  name:name,
24
192
 
25
- leader:leader,
26
-
27
- type:type,
28
-
29
193
  url:url,
30
194
 
31
195
  mode:'reg'
32
196
 
33
- }).done(function(res){
197
+ },function(res){
198
+
34
-
199
+ var $div = $('decklist_template').clone();
200
+
201
+ $div
202
+
203
+ .attr('id','deck_'+res.id)
204
+
205
+ .find('.deckName').text(name)
206
+
35
- console.log("こんにちは!");
207
+ $("#deck_list").append($div);
36
-
208
+
37
- }).fail(function(XMLHttpRequest, textStatus, errorThrown){
209
+ $('#name').val('');
38
-
210
+
39
- console.log('失敗');
211
+ $('#url').val('');
40
-
41
- console.log("XMLHttpRequest : " + XMLHttpRequest.status);
212
+
42
-
43
- console.log("textStatus : " + textStatus);
44
-
45
- console.log("errorThrown : " + errorThrown.message);
46
-
47
- });
213
+ })
48
-
49
- });
214
+
50
-
51
- ```
215
+ ```
216
+
52
-
217
+ しかし検証結果から、そもそも「function(res)」以降の処理を行っていないのではないかと推測し、「var $div = ~」の部分を「console.log("こんにちは!");」のみに変更。結果、返ってこなかった。なので、JavaScriptにjson形式でうまく返すことができていないのではないかと推測、fail処理を用意した。
218
+
53
-
219
+ →やはりjson形式でうまく返せていないことを把握。json書き方自体に問題があると分析した。
220
+
221
+
222
+
223
+ 2、値を代入してみる
224
+
225
+ そもそもjson形式にする値がないのではないかと仮定した。なので、以下のコードを「$res = $ajax_processing->post();」の上に入れてみた。
54
226
 
55
227
  ```PHP
56
228
 
57
- //jsから渡ってきた値を処理するコード。今回はPHP・Aとする
58
-
59
- <?php
60
-
61
- require_once('management.php');
62
-
63
-
64
-
65
- $ajax_processing = new DB();
66
-
67
-
68
-
69
- //今回はmanagementクラスのインスタンスを作って、post()というメソッドを呼び出す処理を書いている
70
-
71
- if ($_SERVER['REQUEST_METHOD'] === 'POST') {
72
-
73
- try {
74
-
75
- // $data = array(
76
-
77
- // "name" => $_GET["name"],
78
-
79
- // "url" => $_GET['url']
80
-
81
- // );
82
-
83
- $res = $ajax_processing->post();//ここの部分は今回はカットいたします。
84
-
85
- // jsonであることを知らせている
86
-
87
- header('Content-Type: application/json');
88
-
89
- echo json_encode($res);
90
-
91
- exit;
92
-
93
- } catch (Exception $e) {
94
-
95
- header($_SERVER['SERVER_PROTOCOL'] . ' 500 Internal Server Error', true, 500);
96
-
97
- echo $e->getMessage();
98
-
99
- exit;
100
-
101
- }
102
-
103
- }
104
-
105
- ```
106
-
107
-
108
-
109
- ```PHP
110
-
111
- //classについて記入しているコード。今回はPHP・Bとする
112
-
113
- //一応POSTメソッドを記入。データベースの読み込み等は省略します。
114
-
115
- <?php
116
-
117
- class DB{
118
-
119
-    public function post(){
120
-
121
- switch ($_POST['mode']){
122
-
123
- case 'reg';
124
-
125
- return $this->registration();
126
-
127
- }
128
-
129
- }
130
-
131
-
132
-
133
-
134
-
135
- public function registration(){
136
-
137
- $sql = "insert into deck_data(name,leader,type,url) values (:name,:leader,:type,:url)";
138
-
139
- $stmt = $this->_db->prepare($sql);
140
-
141
- $stmt->execute(array(
142
-
143
- ":name"=>$_POST['name'],
144
-
145
- ":leader"=>$_POST['leader'],
146
-
147
- ":type"=>$_POST['type'],
148
-
149
- ":url"=>$_POST['url']
150
-
151
- ));
152
-
153
-
154
-
155
- return[
156
-
157
- 'id' => $this->_db->lastInsertId()
158
-
159
- ];
160
-
161
- }
162
-
163
- ```
164
-
165
-
166
-
167
- ### 自分で行ったこと
168
-
169
- 1、原因解明
170
-
171
- まず、データベースに反映されているということは、別のPHPで行っているデータベース代入のプログラミングはうまく処理されている。そこから、
172
-
173
- ・   $res = $ajax_processing->post();
174
-
175
- の部分まではうまく行っていることを仮定した。なので、そのあとの部分に問題があるとした。
176
-
177
-
178
-
179
- そもそもは以下のようなコードを書いていた。
180
-
181
- ```JavaScript
182
-
183
- $("#registration").on('click',function(){
184
-
185
- var name = $('#name').val();
186
-
187
- var leader = $('#reader').val();
188
-
189
- var type = $('#deck_type').val();
190
-
191
- var url = $("#url").val();
192
-
193
- $.post('_Ajax.php',{
194
-
195
- dataType:'text',
196
-
197
- name:name,
198
-
199
- url:url,
200
-
201
- mode:'reg'
202
-
203
- },function(res){
204
-
205
- var $div = $('decklist_template').clone();
206
-
207
- $div
208
-
209
- .attr('id','deck_'+res.id)
210
-
211
- .find('.deckName').text(name)
212
-
213
- $("#deck_list").append($div);
214
-
215
- $('#name').val('');
216
-
217
- $('#url').val('');
218
-
219
- })
220
-
221
- ```
222
-
223
- しかし検証結果から、そもそも「function(res)」以降の処理を行っていないのではないかと推測し、「var $div = ~」の部分を「console.log("こんにちは!");」のみに変更。結果、返ってこなかった。なので、JavaScriptにjson形式でうまく返すことができていないのではないかと推測、fail処理を用意した。
224
-
225
- →やはりjson形式でうまく返せていないことを把握。json書き方自体に問題があると分析した。
226
-
227
-
228
-
229
- 2、値を代入してみる
230
-
231
- そもそもjson形式にする値がないのではないかと推測した。なので、以下のコードを「$res = $ajax_processing->post();」の上に入れてみた。
232
-
233
- ```PHP
234
-
235
229
  $data = array(
236
230
 
237
231
  "name" => $_GET["name"],
@@ -244,6 +238,8 @@
244
238
 
245
239
  結果はターミナルで立てたビルドインサーバーの方に「PHP Notice: Undefined index: name in /home/vagrant/ライバルズの旅/_Ajax.php on line 14」というエラーメッセージが出てきた。
246
240
 
241
+ →どうしてnameが定義されていないのか理解できなくなり、余計混乱してくる。
242
+
247
243
 
248
244
 
249
245
  3、エラーの検証
@@ -256,9 +252,13 @@
256
252
 
257
253
  ・   errorThrown : Unexpected token < in JSON at position 2
258
254
 
259
- ネットで調べてみると、どうやらjsonの中にHTMLの形で入ってしまっている?JSONの値の中に「<」というものがあって、それが混乱を招いているのではないかと思い始める
255
+ ネットで調べてみると、どうやらjsonの中にHTMLの形で入ってしまっている?JSONの値の中に「<」というものがあって、それが混乱を招いているうことがわった
260
-
256
+
261
- しかし、json形式で返しているし、どのようにすると「<」取り除かれるのかわからない。どこを改善すればいいのかがわからなくてお手上げ状態。
257
+ しかし、json形式で返しているし、どのようにすると「<」取り除かれるのかわからない。どこを改善すればいいのかがわからなくてお手上げ状態。
258
+
259
+
260
+
261
+ 以上の仮定で上記プログラムになった。
262
262
 
263
263
 
264
264