回答編集履歴

4

Python例を加えます

2020/07/01 06:22

投稿

YufanLou
YufanLou

スコア463

test CHANGED
@@ -87,3 +87,39 @@
87
87
 
88
88
 
89
89
  Demoコードを[JSFiddle](https://jsfiddle.net/ebzspt50/)でご覧ください。
90
+
91
+
92
+
93
+ ## 追記
94
+
95
+
96
+
97
+ コメントと合わせて、DjangoでHeaderのRefererを読んで動作を分ける例を作ります。
98
+
99
+
100
+
101
+ ```python
102
+
103
+ def check(request):
104
+
105
+ referer = request.META.get('HTTP_REFERER', '')
106
+
107
+ # KeyError の場合 get は2つ目の引数の値を返す
108
+
109
+ if !referer.endswith('check'):
110
+
111
+ form_data = request.POST
112
+
113
+ return render(request, 'polls/check_loading.html', form_data}
114
+
115
+
116
+
117
+ input_url = request.POST['check_url']
118
+
119
+ test_data = {'test':'sssss','test2':'aaaaaaa'}
120
+
121
+ print('ok')
122
+
123
+ return render(request,'polls/check.html',{'test_data': test_data})
124
+
125
+ ```

3

レスポンスのデータの使用例を追加する

2020/07/01 06:22

投稿

YufanLou
YufanLou

スコア463

test CHANGED
@@ -60,6 +60,18 @@
60
60
 
61
61
  // 成功の場合の処理
62
62
 
63
+ // fetchで取得するページで今のページを書き換える
64
+
65
+ document.open();
66
+
67
+ document.write(await response.text());
68
+
69
+ document.close();
70
+
71
+ // 前のページへ正しく戻れるようページ歴史に追加する
72
+
73
+ history.pushState(null, "", "polls/check");
74
+
63
75
  } else {
64
76
 
65
77
  // 失敗の場合の処理
@@ -74,4 +86,4 @@
74
86
 
75
87
 
76
88
 
77
- Demoコードを[JSFiddle](https://jsfiddle.net/yn3a1sbt/)でご覧ください。
89
+ Demoコードを[JSFiddle](https://jsfiddle.net/ebzspt50/)でご覧ください。

2

送信先を取得する

2020/07/01 03:16

投稿

YufanLou
YufanLou

スコア463

test CHANGED
@@ -30,13 +30,17 @@
30
30
 
31
31
 
32
32
 
33
- // フォームデータを取得する
33
+ // 送信先とフォームデータを取得する
34
34
 
35
- let formData = new FormData(document.getElementById("form"));
35
+ let formElem = document.getElementById("form");
36
+
37
+ let formUrl = formElem.action;
38
+
39
+ let formData = new FormData(formElem);
36
40
 
37
41
  // フォームデータを送信する
38
42
 
39
- let response = await fetch('https://url/to/endpoint', {
43
+ let response = await fetch(formUrl, {
40
44
 
41
45
  method: 'POST',
42
46
 
@@ -70,4 +74,4 @@
70
74
 
71
75
 
72
76
 
73
- Demoコードを[JSFiddle](https://jsfiddle.net/b6ac8unm/)でご覧ください。
77
+ Demoコードを[JSFiddle](https://jsfiddle.net/yn3a1sbt/)でご覧ください。

1

簡単化かつDemoコードにリンク

2020/06/30 13:26

投稿

YufanLou
YufanLou

スコア463

test CHANGED
@@ -1,12 +1,18 @@
1
1
  そうしたいと、フォームボタンのデフォルトを使えません。JavaScriptでフォームデータを送信しないといけないです。
2
+
3
+
4
+
5
+ button元素はデフォルトではフォームデータを送信しますが、ここではそうしたくないため、`type="button"`をつけます。
2
6
 
3
7
 
4
8
 
5
9
  ```html
6
10
 
7
- <form>
11
+ <form id="form">
8
12
 
13
+ <!-- フォーム -->
14
+
9
- <button onclick="sendData()">送信</button>
15
+ <button type="button" onclick="sendData()">送信</button>
10
16
 
11
17
  </form>
12
18
 
@@ -24,28 +30,44 @@
24
30
 
25
31
 
26
32
 
27
- let data = // フォームデータを取得する
33
+ // フォームデータを取得する
28
34
 
29
- return await fetch('https://url/to/endpoint', {
35
+ let formData = new FormData(document.getElementById("form"));
30
36
 
31
- method: 'POST',
37
+ // フォームデータを送信する
32
38
 
33
- body: JSON.stringify(data)
39
+ let response = await fetch('https://url/to/endpoint', {
34
40
 
35
- })
41
+ method: 'POST',
36
42
 
37
- .then(response => {
43
+ body: formData
44
+
45
+ });
38
46
 
39
47
 
40
48
 
41
- // ローディング画面を隠します
49
+ // ローディング画面を隠します
50
+
51
+
52
+
53
+ // 送信成功したかを検査
54
+
55
+ if (response.ok) {
56
+
57
+ // 成功の場合の処理
58
+
59
+ } else {
60
+
61
+ // 失敗の場合の処理
62
+
63
+ }
42
64
 
43
65
 
44
-
45
- return response.json();
46
-
47
- })
48
66
 
49
67
  }
50
68
 
51
69
  ```
70
+
71
+
72
+
73
+ Demoコードを[JSFiddle](https://jsfiddle.net/b6ac8unm/)でご覧ください。