質問編集履歴

4

スクリプトを事前に仕込んでおくと解決

2017/08/16 16:31

投稿

testcase
testcase

スコア18

test CHANGED
File without changes
test CHANGED
@@ -311,3 +311,25 @@
311
311
  こちらにつきまして、みなさまの知見をお聞かせいただけますと幸甚です。
312
312
 
313
313
  よろしくお願いします。
314
+
315
+
316
+
317
+ (解決)
318
+
319
+ kei344様のおっしゃる通り、a.phpに
320
+
321
+ ```javascript
322
+
323
+ <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
324
+
325
+
326
+
327
+ ```
328
+
329
+ を<head>~</head>内に入れるとあっさりとできました。
330
+
331
+
332
+
333
+ その他ご助言いただきました皆様にも大変勉強になりました。
334
+
335
+ どうもありがとうございました。

3

ボタンの機能を解除すると使えるようになりましたが、なぜか1回目は表示されません。

2017/08/16 16:31

投稿

testcase
testcase

スコア18

test CHANGED
File without changes
test CHANGED
@@ -22,6 +22,8 @@
22
22
 
23
23
  a.phpのフォームは
24
24
 
25
+ ```HTML
26
+
25
27
  <form method="post">
26
28
 
27
29
  <input type="hidden" name="word" id="word_id" value="あ" />
@@ -30,10 +32,282 @@
30
32
 
31
33
  </form>
32
34
 
35
+ ```
36
+
33
37
 
34
38
 
35
39
  ヘッダのjQueryは
36
40
 
41
+ ```jQuery
42
+
37
43
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
38
44
 
45
+ ```
46
+
39
- のように宣
47
+ のように宣言しています。
48
+
49
+
50
+
51
+ b.php単独ですと
52
+
53
+ ヘッダ部に
54
+
55
+ ```jQuery
56
+
57
+ <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
58
+
59
+ <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
60
+
61
+ ```
62
+
63
+ と宣言されており、
64
+
65
+
66
+
67
+ ```PHP
68
+
69
+ <?php
70
+
71
+ $array_item = array(嫌い, やや嫌い, 普通, やや好き, 好き);
72
+
73
+ $array_data = array(85, 47, 0, 24, 0);
74
+
75
+ ?>
76
+
77
+ ```
78
+
79
+
80
+
81
+ ```jQuery
82
+
83
+ <div id="stage"></div>
84
+
85
+
86
+
87
+ <script type="text/javascript">
88
+
89
+ var array_item = <?php echo json_encode($array_item); ?>;
90
+
91
+ var array_data = <?php echo json_encode($array_data); ?>;
92
+
93
+ var data = [{
94
+
95
+ x: array_item,
96
+
97
+ y: array_data,
98
+
99
+ type: 'bar'
100
+
101
+ }];
102
+
103
+ var layout = {
104
+
105
+ height: 400,
106
+
107
+ width: 500
108
+
109
+ };*/
110
+
111
+ var options = {
112
+
113
+ title: 'Chart'
114
+
115
+ };
116
+
117
+ Plotly.plot('stage', data, options);
118
+
119
+ </script>
120
+
121
+ ```
122
+
123
+ となっています。
124
+
125
+
126
+
127
+ b.phpを直にブラウザで表示させると普通に棒グラフまで表示されますが、
128
+
129
+ a.phpからジャンプすると値は行ってるみたいなのですが、グラフが表示されません。
130
+
131
+
132
+
133
+ chromeをつかってますので、F12で表示を見てみますと、
134
+
135
+ Uncaught ReferenceError: Plotly is not defined
136
+
137
+ というエラーメッセージが出ます。
138
+
139
+
140
+
141
+ 自分でも調べましたが、まずjQueryを読み込んでとか書かれていますが、
142
+
143
+ そのあたりをしてもそうなります。
144
+
145
+
146
+
147
+ ご存知の方、ご教授いただけないでしょうか?
148
+
149
+ よろしくお願いします。
150
+
151
+
152
+
153
+ (補足1)
154
+
155
+ ご指摘ありがとうございます。
156
+
157
+ はい、実際にはこのような感じでフックしておりまして、POST自体は実現できています。
158
+
159
+ a.php上でフォームの下にb.phpの出力が表示される感じです。
160
+
161
+ POST先でUncaught ReferenceError: Plotly is not definedとなるために、
162
+
163
+ ライブラリの問題かなと考えているのですが、すでに書いているために途方に暮れている次第です。
164
+
165
+
166
+
167
+ ```jQuery
168
+
169
+ <script type='text/javascript'>
170
+
171
+ $(document).ready(function(){
172
+
173
+ $("#submit_bt").click(function(event){
174
+
175
+ //フォームのデフォルトの振る舞いを防ぐ
176
+
177
+ event.preventDefault();
178
+
179
+ //初期化
180
+
181
+ $("#ajax_result").empty();
182
+
183
+ form_input();
184
+
185
+ });
186
+
187
+ });
188
+
189
+
190
+
191
+ function form_input(){
192
+
193
+ var word_val=$("#word_id").val();
194
+
195
+ $.ajax({
196
+
197
+ type: 'POST',
198
+
199
+ url: './b.php',
200
+
201
+ data:{
202
+
203
+ word:word_val
204
+
205
+ },
206
+
207
+ dataType: 'html',
208
+
209
+ })
210
+
211
+ .done(function(data, status, jqXHR){
212
+
213
+ $("#ajax_result").html(data);
214
+
215
+ })
216
+
217
+ .fail(function(jqXHR, status, error){
218
+
219
+ $("#ajax_result").html("エラーです");
220
+
221
+ })
222
+
223
+ .always(function(jqXHR, status){
224
+
225
+ $("#ajax_result").html(status);
226
+
227
+ });
228
+
229
+ }
230
+
231
+
232
+
233
+ </script>
234
+
235
+
236
+
237
+ ```
238
+
239
+ (補足2)
240
+
241
+ 上記のjavascriptのコードの
242
+
243
+ ```jQuery
244
+
245
+ .done(function(data, status, jqXHR){
246
+
247
+ $("#ajax_result").html(data);
248
+
249
+ })
250
+
251
+ ```
252
+
253
+
254
+
255
+ の箇所で、なんらかの書式でPlotly.jsを呼び出して解釈してね的な
256
+
257
+ 記載方法はあるのでしょうか?
258
+
259
+
260
+
261
+ なんとなく、この箇所でデータを呼び出したけど、a.phpにはPlotly.jsが
262
+
263
+ つかわれてないような気がするのですが。
264
+
265
+
266
+
267
+ と、実は続きを書いていたはずが操作の誤りか、消えてしまいました。
268
+
269
+
270
+
271
+ ```jQuery
272
+
273
+ .done(function(data, status, jqXHR){
274
+
275
+ $("#ajax_result").html(data);
276
+
277
+ //連続して使えるようにするためボタン無効化解除
278
+
279
+ $button.attr('disabled', false);
280
+
281
+ })
282
+
283
+ ```
284
+
285
+ このように$button.attr('disabled', false);としてやると
286
+
287
+ グラフを呼び出したり、
288
+
289
+ ページ上で引き続きフォームを利用することができるようになりました。
290
+
291
+
292
+
293
+ しかし、新規でページ上で利用する際には、
294
+
295
+ 結果の数値は出るのですが、グラフは出ません。
296
+
297
+ その状態でもう一度ボタンを押して初めて表示されます。
298
+
299
+
300
+
301
+ ただし、グラフが表示された状態でフォームのデータを変更して再びボタンを押すと
302
+
303
+ グラフは問題なく利用できます。
304
+
305
+ 新規でページを呼び出した際には必ず1回目は表示されず、
306
+
307
+ もう1回ボタンを押して初めて表示されるようになるという次第です。
308
+
309
+
310
+
311
+ こちらにつきまして、みなさまの知見をお聞かせいただけますと幸甚です。
312
+
313
+ よろしくお願いします。

2

2017/08/16 13:47

投稿

testcase
testcase

スコア18

test CHANGED
File without changes
test CHANGED
@@ -36,176 +36,4 @@
36
36
 
37
37
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
38
38
 
39
- のように宣言しています。
39
+ のように宣
40
-
41
-
42
-
43
- b.php単独ですと
44
-
45
- ヘッダ部に
46
-
47
- <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
48
-
49
- <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
50
-
51
- と宣言されており、
52
-
53
-
54
-
55
- <?php
56
-
57
- $array_item = array(嫌い, やや嫌い, 普通, やや好き, 好き);
58
-
59
- $array_data = array(85, 47, 0, 24, 0);
60
-
61
- ?>
62
-
63
-
64
-
65
- <div id="stage"></div>
66
-
67
-
68
-
69
- <script type="text/javascript">
70
-
71
- var array_item = <?php echo json_encode($array_item); ?>;
72
-
73
- var array_data = <?php echo json_encode($array_data); ?>;
74
-
75
- var data = [{
76
-
77
- x: array_item,
78
-
79
- y: array_data,
80
-
81
- type: 'bar'
82
-
83
- }];
84
-
85
- var layout = {
86
-
87
- height: 400,
88
-
89
- width: 500
90
-
91
- };*/
92
-
93
- var options = {
94
-
95
- title: 'Chart'
96
-
97
- };
98
-
99
- Plotly.plot('stage', data, options);
100
-
101
- </script>
102
-
103
- となっています。
104
-
105
-
106
-
107
- b.phpを直にブラウザで表示させると普通に棒グラフまで表示されますが、
108
-
109
- a.phpからジャンプすると値は行ってるみたいなのですが、グラフが表示されません。
110
-
111
-
112
-
113
- chromeをつかってますので、F12で表示を見てみますと、
114
-
115
- Uncaught ReferenceError: Plotly is not defined
116
-
117
- というエラーメッセージが出ます。
118
-
119
-
120
-
121
- 自分でも調べましたが、まずjQueryを読み込んでとか書かれていますが、
122
-
123
- そのあたりをしてもそうなります。
124
-
125
-
126
-
127
- ご存知の方、ご教授いただけないでしょうか?
128
-
129
- よろしくお願いします。
130
-
131
-
132
-
133
- (補足1)
134
-
135
- ご指摘ありがとうございます。
136
-
137
- はい、実際にはこのような感じでフックしておりまして、POST自体は実現できています。
138
-
139
- a.php上でフォームの下にb.phpの出力が表示される感じです。
140
-
141
- POST先でUncaught ReferenceError: Plotly is not definedとなるために、
142
-
143
- ライブラリの問題かなと考えているのですが、すでに書いているために途方に暮れている次第です。
144
-
145
-
146
-
147
- <script type='text/javascript'>
148
-
149
- $(document).ready(function(){
150
-
151
- $("#submit_bt").click(function(event){
152
-
153
- //フォームのデフォルトの振る舞いを防ぐ
154
-
155
- event.preventDefault();
156
-
157
- //初期化
158
-
159
- $("#ajax_result").empty();
160
-
161
- form_input();
162
-
163
- });
164
-
165
- });
166
-
167
-
168
-
169
- function form_input(){
170
-
171
- var word_val=$("#word_id").val();
172
-
173
- $.ajax({
174
-
175
- type: 'POST',
176
-
177
- url: './b.php',
178
-
179
- data:{
180
-
181
- word:word_val
182
-
183
- },
184
-
185
- dataType: 'html',
186
-
187
- })
188
-
189
- .done(function(data, status, jqXHR){
190
-
191
- $("#ajax_result").html(data);
192
-
193
- })
194
-
195
- .fail(function(jqXHR, status, error){
196
-
197
- $("#ajax_result").html("エラーです");
198
-
199
- })
200
-
201
- .always(function(jqXHR, status){
202
-
203
- $("#ajax_result").html(status);
204
-
205
- });
206
-
207
- }
208
-
209
-
210
-
211
- </script>

1

jQueryでフォームの振る舞いをコントロールしています。

2017/08/15 16:38

投稿

testcase
testcase

スコア18

test CHANGED
File without changes
test CHANGED
@@ -127,3 +127,85 @@
127
127
  ご存知の方、ご教授いただけないでしょうか?
128
128
 
129
129
  よろしくお願いします。
130
+
131
+
132
+
133
+ (補足1)
134
+
135
+ ご指摘ありがとうございます。
136
+
137
+ はい、実際にはこのような感じでフックしておりまして、POST自体は実現できています。
138
+
139
+ a.php上でフォームの下にb.phpの出力が表示される感じです。
140
+
141
+ POST先でUncaught ReferenceError: Plotly is not definedとなるために、
142
+
143
+ ライブラリの問題かなと考えているのですが、すでに書いているために途方に暮れている次第です。
144
+
145
+
146
+
147
+ <script type='text/javascript'>
148
+
149
+ $(document).ready(function(){
150
+
151
+ $("#submit_bt").click(function(event){
152
+
153
+ //フォームのデフォルトの振る舞いを防ぐ
154
+
155
+ event.preventDefault();
156
+
157
+ //初期化
158
+
159
+ $("#ajax_result").empty();
160
+
161
+ form_input();
162
+
163
+ });
164
+
165
+ });
166
+
167
+
168
+
169
+ function form_input(){
170
+
171
+ var word_val=$("#word_id").val();
172
+
173
+ $.ajax({
174
+
175
+ type: 'POST',
176
+
177
+ url: './b.php',
178
+
179
+ data:{
180
+
181
+ word:word_val
182
+
183
+ },
184
+
185
+ dataType: 'html',
186
+
187
+ })
188
+
189
+ .done(function(data, status, jqXHR){
190
+
191
+ $("#ajax_result").html(data);
192
+
193
+ })
194
+
195
+ .fail(function(jqXHR, status, error){
196
+
197
+ $("#ajax_result").html("エラーです");
198
+
199
+ })
200
+
201
+ .always(function(jqXHR, status){
202
+
203
+ $("#ajax_result").html(status);
204
+
205
+ });
206
+
207
+ }
208
+
209
+
210
+
211
+ </script>