回答編集履歴
4
Python例を加えます
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
レスポンスのデータの使用例を追加する
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/
|
89
|
+
Demoコードを[JSFiddle](https://jsfiddle.net/ebzspt50/)でご覧ください。
|
2
送信先を取得する
test
CHANGED
@@ -30,13 +30,17 @@
|
|
30
30
|
|
31
31
|
|
32
32
|
|
33
|
-
// フォームデータを取得する
|
33
|
+
// 送信先とフォームデータを取得する
|
34
34
|
|
35
|
-
let 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(
|
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/b
|
77
|
+
Demoコードを[JSFiddle](https://jsfiddle.net/yn3a1sbt/)でご覧ください。
|
1
簡単化かつDemoコードにリンク
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
|
-
|
33
|
+
// フォームデータを取得する
|
28
34
|
|
29
|
-
|
35
|
+
let formData = new FormData(document.getElementById("form"));
|
30
36
|
|
31
|
-
|
37
|
+
// フォームデータを送信する
|
32
38
|
|
33
|
-
|
39
|
+
let response = await fetch('https://url/to/endpoint', {
|
34
40
|
|
35
|
-
|
41
|
+
method: 'POST',
|
36
42
|
|
37
|
-
|
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/)でご覧ください。
|